Файл. Текстовый файл. Запись в файл. Чтение из файла. Типизированные файлы, страница 2

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

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

1.2  Запись в файл

Файл создается или пополняется, когда в него что-то записывают. Каждая операция записи добавляет к файлу новую компоненту. Компоненты могут добавляться только к концу последовательного файла. Мы можем себе представить связанный с файлом маркер, который говорит нам, куда можно вставить новую компоненту. На рисунке 7.2 такой маркер представляется в виде стрелки ­.

­                  а)

­

б)

Рисунок 7.2 -  Запись в файл

На рисунке 7.2 (а) показан пустой файл, маркер которого указывает позицию, куда можно поместить первую запись, а рисунок 7.2 (6) показывает файл, в который записаны уже четыре компоненты, причем его маркер установлен в ту позицию, куда надо помещать пятую компоненту.

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

Rewrite (stopka)

Эта операция одновременно уничтожает всю имеющуюся в данный момент в файле stopka информацию. Ситуация, возникающая после выполнения этой процедуры, отражена на рисунке 7.2 (а).

Чтобы записать в файл очередную компоненту, мы заносим нужные данные в переменную stopka и вызываем процедуру put (stopka), результатом работы которой будет создание новой компоненты файла в той позиции, куда указывал маркер, после чего маркер перемещается на одну позицию вправо.

Предположим, что мы описали

var

text : Card;

и что text содержит информацию, предназначенную для записи в файл. Тогда операторы

stopka ­ : = text;

put (stopka);

можно сокращенно записать так:

Write (stopka, text) ;

1.3  Чтение из файла

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

Reset (stopka);

Эта процедура переместит маркер файла на его начало, как показано на рисунке 7.3 (а) она также передаст информацию из первой компоненты файла в переменную stopka.

­

а)

­

б)

в)                                              ­

Рисунок 7.3 - Чтение из файла

Чтобы прочитать следующую компоненту, нужно вызвать процедуру

get (stopka);

которая продвинет маркер и скопирует информацию из следующей компоненты в переменную stopka ­. Может наступить такой момент, когда после очередного перемещения маркера вправо мы не обнаружим там никакой информации — рисунок 7.3 (в). В этом случае значение переменной stopka ­ не может быть определено, а булевская функция еоf (stopka) выдаст значение true. Таким образом, после обращения к процедуре getвозникает одна из следующих ситуаций:

еоf (stopka) = false и stopka­содержит очередную компоненту

или

еоf (stopka) = true и stopka ­ не определена.

Если файл оказывается пустым в тот момент, когда мы читаем из него первую запись, как на рисунке 7.2 (а), значение функции eof (stopka) будет равно trueнепосредственно после вызова процедуры reset. Поэтому лучше сделать проверку, обратившись к функции eofперед тем, как вызывать get. Можно также использовать процедуру read:

геаd (stopka, text), что эквивалентно операторам

text := stopka ­ ;

get (stopka);