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

advertisement
Файлы в Паскале
Файл – именованный набор данных на внешнем носителе.
Типизированные файлы
Типизированный файл – это файл произвольного типа, у которого тип компонент может быть
любым, кроме файлового.
Обмен данными между памятью и внешним устройством осуществляется при помощи файлов.
ЭВМ
Внешнее устройство
ОЗУ
Данные
и
программы
Файлы
Данные
и
программы
Описание типизированного файла:
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
0
1
2
3
4
и т. д.
Так как все компоненты одного типа, то между ними нет никаких маркеров. Ставится только
маркер конца файла (#26).
Компоненты типизированного файла называются записями.
Записи нумеруются с нуля.
Для типизированного файла реализовано два способа доступа к записям:
1


последовательный (записи файла читаются и записываются одна за другим
последовательно)
прямой (можно установить указатель перед любой записью файла и прочитать или записать
ее. Указатель устанавливается при помощи процедуры 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); - удаляется часть файла, начиная с текущей позиции указателя и до его
конца.
2
Например: seek(f,15);
truncate(f); - удаляются все компоненты, начиная с 15-й и до конца файла.
Особенности типизированного файла
1.
2.
3.
4.
5.
Это произвольный тип файла.
Один тип компонент (любой, кроме файлового).
Доступ к компонентам файла прямой и последовательный.
Файл открывается процедурами reset и rewrite и для чтения и для записи.
Типизированный файл хранится на магнитных носителях.
Примеры программ
1. Создание типизированного файла. (Типизированный файл нельзя создать при помощи
текстового редактора.)
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.
2. Подсчитать сумму всех компонент целочисленного типизированного файла. (Читая записи
последовательно.)
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.
3. В типизированном файле вещественного типа поменять местами первую и последнюю
компоненты. (Прямой доступ.)
Var f:file of real;
3
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.
4
Download