Это группа дополнительных процедур и функций, позволяющая изменять последовательный порядок операций чтения и записи. Единственным исключением является базовая логическая функция EOF, указывающая на конец файла:
EOF (< имя_файловой_переменной >)
При чтении, если все данные прочитаны, возникает ситуация «конец файла», и эта функция принимает значение True, иначе она равна False. Так как при записи данные всегда добавляются в конец файла, то функция имеет постоянное значение True.
Процедура
SEEK (< имя_файловой_переменной >,<выражение>);
позволяет явно изменять значение указателя файла, устанавливая его на компонент файла с номером, заданным выражением. Здесь выражение должно быть целого типа Longint.
Эту процедуру можно применять не только для произвольного чтения элементов файла, но и для его усечения. Если затем использовать процедуру
TRUNCATE (< имя_файловой_переменной >);
то компоненты файла, следующие за текущем указателем включительно, будут удалены.
При использовании процедуры Seek может возникнуть ситуация, когда компонентов в файле меньше, чем указанное значение, и может возникнуть аварийная ситуация. Чтобы этого избежать, используют функции
FileSize (< имя_файловой_переменной >)
FilePos (< имя_файловой_переменной >)
Они позволяют получить дополнительную информацию о файле и возвращают: первая – общее число элементов в файле, вторая – номер элемента, на который установлен указатель файла.
Пример работы с файлом
В качестве примера приведем статистическую обработку информации, находящейся в файле из текущего раздела, имя которого вводится с клавиатуры, а расширение .DAT назначено по умолчанию. В программе вычисляются математическое ожидание и дисперсия вещественных чисел соответственно по формулам:
и .
Program Statistic;
Var
Fil:File of real; { входной файл }
x, { очередное вводимое число }
M,D: real; { матожидание и дисперсия }
N: integer; { количество введенных значений }
Name: string; { вводимое имя файла (без расширения) }
Begin
N:=0; M:=0; D:=0;
Read(Name); { вводим имя файла }
{ ставим в соответствие внутреннее и внешнее имена }
Assign(Fil,Name+'.dat');
Reset(Fil); { открываем файл для чтения}
While not Eof(Fil) do Begin
N:=N+1;
Read(Fil,x); { в цикле вводим все значения }
M:=M+x; { и суммируем их }
D:=D+x*x;
end;
M:=M/N;
D:=sqrt(D/N-M*M);
Writeln(' Матожидание= ',M:10:5,
' Дисперсия= ', D:10:5);
end.
При попытке открыть несуществующий файл может возникнуть аварийная ситуация, поэтому необходимо проверять корректность операций.