Типизированный (компонентный) файл – файл с объявленным типом его компонентов, т.е. файл с данными одной и той же структуры.
<имя типа>=File of <тип>;
<тип> - структурированный или одинарный тип;
type
dc=array[1..100,1..20] of real;
rc=record... end;
var
df: file of dc;
dr: file of rec;
Для типизированных файлов обе процедуры RESET и REWRITE устанавливают режим «чтение-запись» (т.е. файл открывается и для чтения и для записи).
Процедуры и функции для работы с типизированными файлами
Ввод/вывод данных
Ввод данных осуществляется оператором
Read (<файловая переменная>, <список ввода>);
<список ввода> - список, содержащий одну или более переменных того же типа, что и компонент файла.
Если файл исчерпан, обращение к READ вызовет ошибку ввода.
Вывод данных осуществляется оператором
Write (<файловая переменная>, <список ввода>);
<список ввода> - список, содержащий одну или более переменных того же типа, что и компонент файла.
Поиск в файле
Уже знакомая нам функция eof(<ф.п.>) сообщает о достигнутом конце файла. Все остальные функции "поиска конца", свойственные текстовым файлам, нельзя применять к файлам типизированным.
|
|
Зато существуют специальные подпрограммы, которые позволяют работать с типизированными файлами как со структурами прямого доступа:
1. Функция Filepos(<файловая переменная>):longint сообщит текущее положение указателя в файле f. Если он указывает на самый конец файла, содержащего N элементов, то эта функция выдаст результат N. Это легко объяснимо: элементы файла нумеруются начиная с нуля, поэтому последний элемент имеет номер N-1. А номер N принадлежит, таким образом, "несуществующему" элементу - признаку конца файла.
2. Функция Filesize(<файловая переменная>):longint вычислит длину файла f.
3. Процедура Seek(<файловая переменная>,<номер записи>) передвинет указатель в файле f на начало записи с номером N. Если окажется, что n больше фактической длины файла, то указатель будет передвинут за реальный конец файла.
4. Процедура Truncate(<файловая переменная>) обрежет "хвост" файла f: все элементы начиная с текущего и до конца файла будут из него удалены. На самом же деле произойдет лишь переписывание признака "конец файла" в то место, куда указывал указатель, а физически "отрезанные" значения останутся на прежних местах - просто они станут "бесхозными".