Это файлы, состоящие из данных одного и того же типа, длина которых постоянна, в котором нет разбиения на строки, все данные располагаются последовательно. Исходя из этого к данным этого файла можно обращаться с помощью последовательного доступа и прямого доступа. Прямой доступ означает возможность позиционировать внутри файла указатель на интересующую запись
Структура файла.
В файле нумеруется не записи, а границы между ними при обращение к файлу указатель в файле устанавливается на первую запись т.е. на нулевую границу. При чтение записи указатель переходит на следующую границу.
Объявление типизированного файла
<файловая переменная>: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);