double arrow

Последовательный и прямой доступ к файлам


Файл - последовательная структура данных. После его открытия доступен нулевой компонент. Можно последовательно считывать или записывать один компонент файла за другим. Допустим, необходимо считать пятнадцатый, а затем первый элементы. С помощью последовательного доступа к файлу это можно сделать следующим образом:

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.







Сейчас читают про: