metod_15.03.04_atppp_oaip_up_2016 (1016600), страница 16
Текст из файла (страница 16)
Над ними нельзявыполнять никакие операции (присваивать значение, сравнивать и т.д.). Их можноиспользовать лишь для выполнения операций с файлами (чтения, записи,удаления файла и т.д.). Кроме того, через файловую переменную можно получитьинформацию о конкретном файле (тип, параметры, имя файла и т.д.).11.6.
Операции над файламиЯзык Паскаль не содержит встроенных операций по обработке файловыхпеременных. Это характерно для многих языков программирования высокогоуровня. Поэтому для реализации операций над файловыми переменными базовоеядро Паскаля требует определённого интерфейса с физическим аппаратнымсооружением. Этот интерфейс реализуется с помощью специальных процедур ифункций.Операции по установке связей между файловой переменной и внешнимустройством или внешним файлом на магнитном носителе, т.е.
операции пооткрытию файлов, а так же операции по «развязке» этих связей, т.е. закрытиюфайлов реализуются процедурами:AssignRewriteCloseResetAppendFlushСвязывание файловой переменной с именем файла осуществляетсяобращением к встроенной процедуре ASSIGN:Assign ( файловая переменная, имя файла ).Здесь имя файла – переменная или константа типа String. Имя должно бытьнаписано в соответствии с правилами MS DOS, может включать путь и не должнопревышать 79 символов. Если строка имени пустая, осуществляется связь состандартным файлом ввода или вывода (как правило, консолью).Файл становится доступен программе только после выполнения особойпроцедуры открытия файла.
Эта процедура заключается в связывании ранееобъявленной файловой переменной с именем существующего или вновьсоздаваемого файла, а также в указании направления обмена информации: чтениеиз файла или запись в него.Примеры:1) Установление связи с внешним файлом на магнитном носителе. В этомслучае имя внешнего файла представляет собой спецификацию файла:Assign (Namefaile,’C:\direct\tfile.dat’);Assign (Kandy,’D:\direct\sadry\fio.dat’);902) Установление связи программного файла с внешним устройством.
Дляввода с клавиатуры, если далее следует операция считывания данных; либовывода на экран дисплея, если далее следует операция записи данных:Assign (inputfile,’CON’);3) Для вывода данных на печатающее устройство (допускаетсяподключение до трёх печатающих устройств): LPT1 (синоним PRN), LPT2 иLPT3.Assign ( Outhut,’LPT1’ );4) Для последующего обмена информацией по коммуникационнымканалам. Смысл записи псевдофайлов COM1 (или синоним AUX) либо СОМ2определяется конкретным внешним устройством.
Например, это может быть«мышь» или графопостроитель (плотер), либо узел при сетевой связикомпьютеров:Assign ( interfile,’COM1’ );5) Установление связи с фиктивным внешним устройством. Например, приотладке программы вывод информации блокируется, но конкретная работапрограммы при этом не нарушается:Assign (myfile,’NUL’);Реализация операций обмена даннымиПосле установления связи необходима инициализация этой связи, т.е., какпринято говорить, необходимо открытие файла. Иницировать файл – означаетуказать для этого файла направление передачи данных. В Паскале можно открытьфайл для двух видов взаимодействия: чтения и записи.Эта операция в общем случае выполняется следующими процедурами:Reset (файловая переменная, размер записи);Reset (файловая переменная);Rewrite (файловая переменная);Rewrite (файловая переменная, размер записи);Append (файловая переменная);Основные процедуры обработки файловReset (F) – подготовка чтения файла F.
При этом указатель позициипомещается в начало файла. Если файл не пустой, то переменной F присваиваетсязначение его первого компонента, а функция eof (F) = false. Параметр «размерзаписи» указывается лишь в случае обработки нетипизированных файлов. Врезультате обработки процедуры Reset, если соответствующий файл обнаружен,текущий указатель устанавливается в начале файла, т.е.
на нулевом элементефайла. Если же внешний файл не обнаружен, то вырабатывается условие ошибки.Оператор процедуры reset(f) переводит файл f в режим чтения и устанавливаетокно на первую позицию файла. Оператор процедуры read(f,v) присваиваетпеременной v значение текущей компоненты из файла f и передвигает окно наследующую позицию. Процедура reset может применятся к одному и тому жефайлу несколько раз и при этом содержимое его не изменяется.Rewrite (F) – подготовка записи в файл. Текущее значение файловойпеременной F становится равным emply (пустой). Функция eof (F) = true.
Может91записывать новый файл. Оператор процедуры rewrite(f) устанавливает файл врежим записи, если раньше в этот файл были записаны какие-то данные, то онитеряются. Оператор процедуры write(f,x) записывает в файл f очереднуюкомпоненту x, после чего окно сдвигается на следующую позицию. Общий видоператора подготовки запист:Rewrite (файловая переменная, [имя файла]);Если внешнее имя файла опущено при открытии файла для записи, тофайловая переменная трактуется как временный файл, который по окончаниюработы программы ликвидируется. Параметр. «размер записи» указывается лишьв случае нетипизированного файла.
В результате обработки процедуры ReWrite,если соответствующий файл обнаружен, текущий указатель устанавливается вначале файла, на место нулевого элемента записывается «символ конца файла».Другими словами, процедура rewrite очищает содержимое файла, а текущийуказатель устанавливается в позицию готовности записи нулевого элемента.Непосредственные операции ввода–вывода выполняются процедурами readи write. Обращения к этим процедурам:Read (файловая переменная, выражение);Write (файловая переменная, выражение);После открытия на запись файл считается пустым, а указательустанавливается на начало; в этот файл затем можно последовательно заноситьинформацию из буферной переменой при помощи процедуры write:write (файловая переменная);Если файл с таким именем уже существует, то вся информация,хранившаяся ранее в этом файле, становится недоступной.
Процедура Writeзаписывает в файл очередной компонент и переставляет указатель на свободноеместо. Таким образом, число компонентов файла увеличивается на единицу.В принципе все операции создания и чтения последовательного файламожно сформировать из приведённых простых процедур и стандартной функцииeof. На практике же часто полезно совмещать перемещение по файлу с доступом кбуферной переменной. Поэтому введём две новые процедуры Read и Writeследующим образом:Read (F,X), где Х – некоторая переменная.Write (F,Y), где Y – некоторое выражение.Read и Write – специальные процедуры, распространённые для работы спеременным числом параметров (Х1,Х2,…,ХN – переменные, а Y1,Y2,…,YN –выражения).Обращение к функции Read (F,X1,…,XN) эквивалентно конструкцииbeginRead (F,X1);Read (F,X2);…………….Read (F,XN)end;к функции Write (F,Y1,Y2,…,YN) - эквивалентно конструкцииbeginWrite (F,Y1);92Write (F,Y2);…………….Write (F,YN)end;Если элементы в файле хранятся по строкам, то для определения концастроки файла используется оператор циклаWhile Not EOLN (имя) Do,а для перехода на новую строку файла – оператор Readln (имя).Чтение файла – это ввод данных из внешнего файла, находящегося на диске,в оперативную память машины.
Данные внешнего файла становятся доступнымипрограмме. Процедура Read предназначена для чтения данных из внешнегофайла, связанного с файловой переменной, в программу. Выражение содержитсписок переменных, в которые помещаются считываемые элементы файла. Типэтих переменных должен совпадать с баз. типом элементов файла.Для чтения файла необходимо выполнить следующие действия:открыть файл для чтения ( процедура Reset );ввести данные файла в программу ( процедура Read );закрыть файл для чтения ( процедура Close )Общая форма чтения файла:Reset ( файловая переменная, [имя файла] );……………..Read ( файловая переменная, параметры );……………..Close ( файловая переменная );Читать файл можно только с начала, предварительно открыв его на чтениепроцедурой Reset.Порядок выполнения операций чтения.Начиная с текущей позиции, то есть с позиции текущего указателя,последовательно считываются элементы файла и засылаются в поля переменных,указанных в выражении.
После чтения очередного элемента текущий указательсмещается на начало следующего элемента файла. При достижении текущимуказателем позиции, не содержащей элементов файла, завершается операциячтения, то есть достигается конец файла. Возникновение этой ситуации можнопроверить с помощью встроенной функции EOF.Пример. При открытии файла с именем С для чтения соответствующая буфернаяпеременная принимает значение первой записи файла С. Если файл пуст, то EOF(C) = True, а значение буферной переменной не определено.