Текстовый файл

Var

Доступ к компонентам файла

Определение и особенности файлов

ФАЙЛЫ

В Паскале файлом называется конечное множество компонентов одного и того же типа, расположенных во внешней памяти. В простейшем случае каждая компонента файла может быть числом или символом. В общем случае типом компоненты может являться любой допустимый в языке тип, кроме файлов, т.е. нельзя создать файл файлов. Число компонентов файла может меняться в отличие от массивов и ограничивается только емкостью внешней памяти. Новая компонента всегда добавляется только в конец файла, т.е. нельзя заменить новой компонентой одну из уже существующих. Любой файл имеет свое имя, что позволяет программе одновременно работать с несколькими файлами.
При работе с файлами наиболее часто возникает необходимость читать информацию из файла и писать информацию в файл. Перед использованием файла в программе необходимо объявить специальную файловую переменную, которая представляет файл в программе и интерпретирует его как бесконечный список значений одного и того же типа. Файловую переменную можно задать одним из трех способов:

 

 

var
F1: file of integer;
F2: text;
F3: file;

Способ объявления определяет вид файла, а, следовательно, способ хранения информации в файле. В нашем случае

F1 - типизированный файл ( file of ...);

F2 - текстовый файл (text), каждая его компонента - символ;

F3 - нетипизированный файл, тип его компонентов не указан, что делает его совместимым с любыми файлами.

Любой программе на Турбо-Паскале доступны без каких-либо предварительных объявлений два файла со стандартными файловыми переменными:

INPUT - для чтения данных с клавиатуры;

OUTPUT - для вывода данных на экран.

Все другие файлы становятся доступными программе после связывания конкретного физического файла с файловой переменной. Такое связывание осуществляет процедура

Assign( < имя файловой переменной >, < имя файла >);

Имя файла представляет собой строковое выражение и может включать путь к файлу например:

assign( F2, 'prog1.txt');

assign( F1, 'd:\ZLV\myfile.dat');

После первого вызова процедуры файловая переменная F2 будет связана с файлом 'prog1.txt' из текущего каталога, во втором случае файловая переменная F1 связывается с файлом 'myfile.dat' из каталога первого уровня ZLV диска D. Разумеется, можно предварительно ввести имя файла, а затем связать его файловой переменной:

Name: string;

. . .

write ('Введите имя файла ');

readln (Name );

assign( F2, Name );

После связывания файловой переменной с конкретным файлом процедурой Assign его необходимо открыть. Перед началом чтения информации из файла его открывают процедурой

Reset( < имя файловой переменной > );

Процедура Reset предполагает, что открываемый файл уже существует, в противном случае возникает ошибка. Встроенная процедура

Rewrite( < имя файловой переменной > );

открывает файл для записи. Процедура Rewrite допускает, что открываемый файл еще не существует. Если файл уже существовал, то после выполнения процедуры Rewrite все данные этого файла стираются и запись осуществляется в начало файла.

Завершение действий с файлом осуществляет процедура

Close( < имя файловой переменной > );

После этого файловую переменную можно связать процедурой Assign с другим файлом. Заметим, что закрытие всех файлов в программе происходит автоматически при завершении работы программы, однако явное закрытие файлов процедурой Close является хорошим стилем программирования.

Работа с файлами осуществляется с использованием специальных буферов, расположенных в оперативной памяти. При записи в файл информация сначала заносится в буфер, а затем, по мере его заполнения, переписывается в файл на внешнее запоминающее устройство. Одним из действий процедуры Close является очистка буферов. Без выполнения этой процедуры часть информации, предназначенной для записи в файл, может быть утеряна.

Текстовый файл в программе объявляется через файловую переменную стандартным типом Text и представляет собой последовательность символьных строк переменной длины, разделенных специальным символом "конец строки". В конце текстового файла размещается специальный признак "конец файла". Эти признаки проверяются соответствующими логическими функциями:

  • Eoln( var F: text ): boolean, - возвращает значение TRUE, если достигнут конец строки текстового файла, связанного с файловой переменной F;
  • Eof( var F: text ): boolean, - возвращает значение TRUE, если достигнут конец текстового файла, связанного с файловой переменной F.

Для доступа к элементам текстового файла применяются операции чтения (Read, Readln) и операции записи (Write , Writeln). Отметим, что в Паскале существует возможность не только вводить в файл и выводить из файла символы, но также реализовывать операции с константами.
Перед началом работы с текстовым файлом в программе необходимо вызвать процедуру Assign , которая установит связь между файловой переменной и конкретным дисковым файлом. После чего соответствующие процедуры (Reset или Rewrite) открывают файл для чтения или записи.