Файл - последовательная структура данных. После его открытия доступен нулевой компонент. Можно последовательно считывать или записывать один компонент файла за другим. Допустим, необходимо считать пятнадцатый, а затем первый элементы. С помощью последовательного доступа к файлу это можно сделать следующим образом:
reset (f);
for i:=1 top 15 do
read (f,b);
reset (f);
read (f,a);
Как видно, такое чтение компонента из файла, а затем повторное открытие файла - не самый удачный способ. Гораздо удобнее использовать встроенные процедуры и функции Турбо Паскаля для прямого доступа к компонентам файла, что означает возможность определять позицию интересующего нас компонента внутри файла и указывать непосредственно на него. При прямом доступе к файлу его компоненты нумеруются от 0 до n-1, где n-число компонентов в файле. Самый первый компонент имеет номер 0.
Функция filesize.
Функция filesize (f), f- Файловая переменная, возвращает значение типа longint, то есть число реальных компонентов в открытом файле f. Для пустого файла она вернет 0.
|
|
Функция filepos.
Функция filepos(f) возвращает значение типа longint -текущую позицию в файле f, который должен быть открыт. Если файл только что открылся, то filepos(f)=0. После прочтения последнего компонента из файла значение filepos(f) совпадает со значением filesize(f), что указывает на достижение конца файла. Последнее можно проверить еще и так:
if filepos(f)=filesize(f) then
writeln (‘достигунт конец файла’);
Пример 3. Вычислить количество компонентов в файле вещественных чисел, вывести содержимое файла на экран.
Var
f:=file of real;
a:=real;
i:=word ;
Begin
assign (f,’abc.dat’);
reset (f);
writeln (‘в файле’,filesize(f),’xbctk’);
for i:=1 to filesize(f) do
Begin
read (f,a);
write (a,’ ‘)
end;
close (f);
End.