Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Емельянов.doc
Скачиваний:
12
Добавлен:
03.11.2018
Размер:
3.25 Mб
Скачать

Типизированные файлы

Файловая переменная для этого типа объявляется следующим образом: Var F : file of <тип элементов>,-. Тип элементов может быть любым, за исключением файлового типа и указательного. Например, Var f : file of Double;.

Как и в случае текстовых файлов, для работы с типизированными фай­лами необходимо файловую переменную связать с конкретным файлом, за­тем указать режим работы с этим файлом и по окончании закрыть его, на­пример,

AssignFile(F, 'c:\a.dat');

Reset(F); {или Rewrite(F)}

………….

CloseFile(F);.

Процедура Rewrite, как и в случае текстовых файлов, открывает новый типизированный файл для записи информации. Однако процедура Reset работает не так, как с текстовыми файлами, - она устанавливает доступ и на чтение, и на запись информации. Чтение и запись осуществляются следую­щими процедурами:

Read((<ф.п.><список>); Write(<ф.п.>, <список>);.

Так как данный файл является файлом прямого доступа, можно устанав­ливать файловый указатель на любую запись файла. Для этой цели исполь­зуется процедура Seek{<ф.п.>,<номер записи>); {отсчет от 0}.

Найденную запись можно прочитать или снова перезаписать. В отличие от текстовых файлов, при записи информации в типизированный файл нель­зя использовать выражения в процедуре Write.

Файлы без типа

В данном случае файловая переменная указывается так: Var F: file;.

Связывание файловой переменной с конкретным файлом и закрытие файла осуществляют так же, как и для типизированных файлов. Однако за­дание режима работы с файлом отличается от аналогичной операции, при­меняемой к типизированному файлу:

Reset(<ф.п.>, Size);

Rewrite(<ф.п.>, Size);.

Добавляется дополнительный параметр size - размер элементов в фай­ле. Величину Size можно устанавливать равной 1. Можно не указывать Size, тогда система по умолчанию примет величину 128. Чтение и запись производятся процедурами:

BlockRead(<ф.п.>, Buffer,N, Result);

BlockWrite(<ф.п.>, Buffer, N, Result);.

Здесь Buffer обычно задается описанием Array ... of Char или Array ... of Byte, N - число элементов, которое требуется прочитать или запи­сать; Result - конкретное число элементов, которое было прочитано или записано.

Если пользователь знает, какая информация записана в файле, то можно задавать конкретный размер записи. Например, если необходимо работать со структурами данных, то, используя функцию SizeOf, можно определить размер записи, кратный полученному с помощью SizeOf числу. Использо­вание процедур BlockRead и BlockWrite в этом случае значительно уско­рят работу с файлами.

ДОПОЛНИТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

Существует достаточно большое число процедур для работы с файлами, например текстовый файл можно дописывать с помощью задания специаль­ного режима: Append(<ф.п. >);. Эта процедура устанавливает указатель в конец файла. Очень полезной является функция Eof (<ф.п.>) (End of file). Она возвращает true, если достигнут конец файла. С помощью этой функции Можно контролировать навигацию по файлу: not Eof(F) do begin

140

141

Read(F, a); ....

end;.

Процедура Read (как и процедура write) сдвигает файловый указатель на единицу. Таким образом, с помощью приведенного выше цикла можно прочитать файл до конца.