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

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

Структура файла.

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

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

<файловая переменная>:file of <тип>;

Компонентами файла может быть любой тип, определенный пользователем, за исключением самих файлов и объектов, а также структурированных типов, включающих в себя типы и объекты.

Доступ к компонентам файла осуществляется с помощью следующих процедур:

Write(<ф.п.>,<список переменных или значений>);

Read(<ф.п.>,<список переменных>);

Переменные и значения в списках должны иметь тот же тип, что и компоненты файла.

Если список содержит несколько переменных, то указатель в файле будет смещаться на следующую после каждой операции ввода-вывода

Пример:

Var

F:file of byte;

X1,x2:byte;

Begin

Assign(f,’t.dat’);

Rewrite(f);

Write(f,x1,x2);

Close(f);

Reset(f);

Read(f,x1,x2);

Close(f);

В отличие от текстовых файлов информация хранится в виде, подобном машинному представлению, компоненты внутри файла не отделяют друг от друга. Е эти файлам не применяются процедуры writeln, readln, так как в этих файлах нет строк. Для определения конца файла возможно использовать функцию Eof(f) либо Filesize(f), возвращающую количество записей в файле. Процедура reset для типизированных файлов открывает файл одновременно как на запись так и на чтение.

Пример

Пусть требуется записать в типизированный файл 3 записи, содержащие фамилию и год рождения. после записи осуществить поиск и отображение фамилий тех. кто родился в 1990 году.

Type

T_rec=Record

Name:String[15];

Year:word;

end;

var

f:file of T_Rec;

rec: T_rec;

i:byte;

begin

Assign(f, ‘z.dat’);

***

Rewrite(f);

for i:=1 to 3 do

begin

Rec.Name:=‘’;

write(‘Фамилия:’);

readln(‘Rec.name’);

write(‘Год:’);

readln(’Rec.Year’);

write(f.rec);

end;

close(f);

reset(f);

while not eof(f) do

begin

read(f,rec);

if Rec.year=1990 then

begin

write(rec.name);

readkey;

end;

end;

close(f);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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