Кроме функции Eof для файлов с типом существуют такие функции:
FileSize(F):LongInt – возвращает количество компонентов в файле (файл может быть уже открытый). Это номер компонента, который вытекает за последний.
FilePos(F):LongInt – возвращает номер текущего компонента в файле (первый компонент имеет номер нуль).
Обработка и корректировка файла
При выполнении задания предполагается организовать запись в файл дополнительной информации одним из следующих способов:
а) запросить в диалоге количество вводимых записей и ввести при помощи цикла с параметром ровно N записей;
б) организовать ввод при помощи цикла с постусловием до тех пор, пока не будет введен признак конца ввода.
Для расширения существующего файла с типом (занесение записей в конец файла), следует выполнить позиционирование в конец файла, а потом делать запись:
Var
F : File Of <Type>;
X : <Type>
…………………………
Seek (F, FileSize(F));{позиционирование за последним компонентом файла}
Write(F,X); {запись нового компонента в конец файла}
Пример выполнения задания лабораторной работе.
Пример 37. Сформировать файл из квадратов целых чисел. Найти сумму четных чисел и количество нечетных чисел среди компонентов файла.
Программа имеет вид:
program pr37;
uses crt;
var f:file Of integer;
x,n,s,k:integer; c:char;
begin clrscr;
ASSIGN(F,'D:\FA.DAT');
REWRITE(F);
WRITELN('УВОДИ ЦЕЛЫЕ ЧИСЛА'); READ(X);
while x<>0 do begin
n:=sqr(x); write(f,n);
read(x) end;
RESET(F); CLRSCR;
WRITELN('СОДЕРЖАНИЕ ФАЙЛА:');
s:=0; k:=0;
while not eof(f) do
begin
read(f,x); write(x:4);
if x mod 2 =0 then
S:=S+X ELSE K:=K+1 END;
CLOSE(F); WRITELN;
WRITELN('СУММА ЧЕТНЫХ ЧИСЕЛ =',S:5);
WRITELN('КОЛИЧЕСТВО НЕЧЕТНЫХ ЧИСЕЛ =',K:2);
c:=readkey
end.
В этой программе признаком конца записи в файл является ввод числа нуль.