Файлы в Паскале

Файл – именованный набор данных на внешнем носителе.

Типизированные файлы

Типизированный файл – это файл произвольного типа, у которого тип компонент может быть любым, кроме файлового.

Обмен данными между памятью и внешним устройством осуществляется при помощи файлов.

Описание типизированного файла:

Type tf=file of <тип компонент>;

Var f:tf;

g:file of <тип компонент>;

Например:

Type tf=file of real;

tm=array[1..50] of integer;

Var f:tf;

g:file of char;

fm: file of tm;

x:real;

c:char;

m:tm;

Структура типизированного файла - линейная:

#26

и т. д.

Так как все компоненты одного типа, то между ними нет никаких маркеров. Ставится только маркер конца файла (#26).

Компоненты типизированного файла называются записями.

Записи нумеруются с нуля.

Для типизированного файла реализовано два способа доступа к записям:

    последовательный (записи файла читаются и записываются одна за другим последовательно) прямой (можно установить указатель перед любой записью файла и прочитать или записать ее. Указатель устанавливается при помощи процедуры seek) .

Типизированные файлы хранятся на магнитных носителях.

Процедуры и функции, определенные над типизированными файлами

1.  Assign(var f:tf; filename:string); – устанавливает соответствие между физическим и логическим именами файла.

Наличие этой процедуры обязательно.

Примеры:

Assign(f, ‘w:\info\kl10\a. dat’); в качестве расширения у типизированного файла указывается ‘dat’.

НЕ нашли? Не то? Что вы ищете?

Writeln(‘input filename’); {ввод физического имени файла через переменную filename}

Readln(filename);

Assign(f, filename);

2.  Reset(var f:tf); - открытие файла для чтения.

Указатель файловой переменной устанавливается перед первой компонентой. Файл готов для чтения. Если файла с таким именем нет, то выдается сообщение об ошибке. Reset(f);

3.  Rewrite(var f:tf); - открытие файла для записи.

Если такого файла нет, то создается метка файла и указатель файловой переменной устанавливается перед первой компонентой. Если файл с таким именем есть, то указатель также устанавливается перед первой компонентой. Содержимое файла при записи будет стерто. За этим должен следить программист.

4.  Eof(var f:tf): boolean; - определяется конец файла. Функция возвращает значение true, если встретился маркер конца файла (#26).

5.  Close(var f:tf); - закрытие файла для чтения или записи. Устанавливается маркер конца файла (#26). По окончании работы файл должен быть обязательно закрыт, иначе к нему не будет доступа. Close(f);

6.  Read(var f:tf; k:<тип компонента>); - чтение компоненты из файла в переменную k.

7.  Write(var f:tf; k:<тип компонента>); - запись из переменной k в компоненту файла.

k

После чтения/записи компоненты, указатель перемещается к следующей компоненте.

8.  FileSize(var F) : LongInt; - возвращает количество компонент типизированного файла.

9.  FilePos(var F) : LongInt; - возвращает номер позиции указателя файловой переменной.

10.  Seek(var F; N: LongInt); - устанавливает указатель перед компонентой N.

Например: seek(f,0); - устанавливает указатель перед нулевой компонентой.

seek(f,5); - устанавливает указатель перед пятой компонентой.

11.  Truncate(var F); - удаляется часть файла, начиная с текущей позиции указателя и до его конца.

Например: seek(f,15);

truncate(f); - удаляются все компоненты, начиная с 15-й и до конца файла.

Особенности типизированного файла

Это произвольный тип файла. Один тип компонент (любой, кроме файлового). Доступ к компонентам файла прямой и последовательный. Файл открывается процедурами reset и rewrite и для чтения и для записи. Типизированный файл хранится на магнитных носителях.

Примеры программ

Создание типизированного файла. (Типизированный файл нельзя создать при помощи текстового редактора.)

Var f:file of real;

k:real;

fname:string;

n, i:integer;

begin writeln(‘input fname’);

readln(fname);

assign(f, fname);

rewrite(f);

writeln(‘input n’);

readln(n);

for i:=1 to n do

begin readln(k);

write(f, k);

end;

close(f);

end.

Подсчитать сумму всех компонент целочисленного типизированного файла. (Читая записи последовательно.)

Var f:file of integer;

fname:string;

k, sum:integer;

begin writeln(‘input fname’);

readln(fname);

assign(f, fname);

reset(f);

sum:=0;

while not eof(f) do

begin read(f, k);

sum:=sum+k;

end;

close(f);

writeln(‘sum=’,sum);

end.

В типизированном файле вещественного типа поменять местами первую и последнюю компоненты. (Прямой доступ.)

Var f:file of real;

x, y:real;

fname:string;

begin writeln(‘input fname’);

readln(fname);

assign(f, fname);

reset(f);

read(f, x);

seek(f, filesize(f)-1);

read(f, y);

seek(f,0);

write(f, y);

seek(f, filesize(f)-1);

write(f, x);

close(f);

end.