Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 2 семестр.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
609.28 Кб
Скачать

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

Типизированный файл – это последовательность компонент одного типа. В этой связи файловая переменная для работы с ним описывается так:

var <ФП> : file of <тип компонент файла >;

Типизированные файлы являются файлами произвольного доступа. Это означает, что любой элемент такого файла доступен по его номеру как для чтения, так и для его изменения (перезаписи). Компоненты файла пронумерованы от нуля. С помощью функции FileSize(<ФП>) можно установить размер открытого файла. Номер текущего элемента файла возвращает функция FilePos(<ФП>). Процедура Seek(<ФП>, <Номер>) позволяет переместить текущий указатель в файле на позицию с заданным номером. Процедура Truncate(<ФП>) помещает признак конца файла в текущую позицию и тем самым удаляет все существовавшие за ней элементы. Запись и чтение данных для открытого файла можно производить соответственно с помощью процедур Write (<ФП>, <Список вывода>) и Read(<ФП>, <Список ввода>). В списках ввода и вывода могут присутствовать переменные одного типа с компонентами файла. Покажем примеры действий с типизированными файлами.

Пример 1. Продемонстрируем особенности реализации прямого доступа к элементам файла.

program Tip_File;

var

f : file of byte;

i, n : byte;

begin

assign(f, 'f_byte');

rewrite(f);

for i := 1 to 8 do

begin

writeln('Введите ', i, '-ю компоненту файла');

readln(n);

write(f, n)

end;{for}

close(f);

reset(f); {Открываем файл для действий с ним}

writeln('Исходный файл :');

repeat

read(f, n);

write(n : 4);

until eof(f);

writeln;

seek(f, 3); {Маркер  на 4-й элемент файла}

n := 13;

write(f, n); {'Затерли' старое значение новым}

read(f, i); {Читаем следующий (!) элемент файла}

writeln('5-й элемент файла = ', i);

seek(f, 3); {Вернулись к 4-му элементу}

read(f, i);

writeln('4-й элемент = ', i);

seek(f, 5);

truncate(f); {Урезаем файл до 5 элементов}

reset(f); {Маркер  на начало файла}

while not eof(f) do

begin {Выводим содержимое файла}

read(f, n);

write(n : 4);

end;

writeln;

writeln('Размер файла = ', filesize(f));

close(f)

end.

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

program file_zap;

uses crt;

const n = 25;

type

st = record {Тип-запись}

fam : string[25];

sb : real

end;

var

i : byte;

f : file of st; {Файл записей}

buf : st;

begin

clrscr;

assign(f, 'gruppa');

rewrite(f);

for i := 1 to n do

begin

with buf do

begin

writeln('Введите фамилию ', i, '-го студента');

readln(fam);

writeln('Введите его сpедний балл');

readln(sb)

end; {with}

write(f, buf) {Запись buf в файл}

end; {for}

close(f); {Закpываем файл}

reset(f); {Откpываем файл для чтения}

repeat

read(f, buf);

with buf do

writeln(fam, ' ' : 25 - length(fam), sb : 4 : 2)

until eof(f);

writeln('Нажмите ENTER');

readln

end.