Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
13.03.2016
Размер:
31.74 Кб
Скачать

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

лекция №15

Объявление файловой переменной

Var ИмяФайла: file of БазовыйТип;

тип компоненты файла: любой тип, кроме файл

Типизированные файлы хранят информацию во внутреннем представлении (определяемом базовым типом).

Подпрограммы, работающие с файлами любого вида (текстовыми, типизированными, нетипизированными)

Связывание программного и физического имен файла: AssignFile(ПрогрИмя, ФизИмя)

Открытие файла для чтения: Reset(ПрогрИмя)

Открытие файла для записи: Rewrite(ПрогрИмя)

Проверка на конец файла: EOF(ПрогрИмя)

Закрытие файла: CloseFile(ПрогрИмя)

Внимание: в типизированные файлы, открытые для чтения, можно осуществлять запись; причина разрешения: компоненты типизированного файла имеют фиксированный размер (определяемый базовым) типом – ср. с текстовыми файлами. По этой же причине к типизированным файлам применяются подпрограммы прямого доступа.

Процедуры чтения/записи для типизированных файлов

Read (ПрогрИмяФайла, СписокВвода)

Write (ПрогрИмяФайла, СписокВывода)

Список ввода (вывода) содержит только элементы базового типа.

Нет окончания ln!

Подпрограммы прямого доступа

Функция FILESIZE(ИмяФайла) возвращает число компонент файла.

Функция FILEPOS(ИмяФайла) возвращает номер компоненты, которая будет обрабатываться следующей процедурой ввода-вывода.

Процедура SEEK(ИмяФайла, №компоненты) смещает указатель к требуемой компоненте.

program Project1;

Var F:file of integer; a,b:integer; begin

AssignFile(f, 'ftyp');{файл ftyp поготовлен с помощью}

Reset(F);

{специальной программы}

If eof (F) then

 

writeln (' File is empty')

else

Что делает программа?

Begin

writeln('Input a'); readln(a);

while not eof(F) do begin

read(F,b); if b=0 then begin

seek(F,filepos(F)-1);{возврат к компоненте, равной 0} write(F, a){замена нулевого значения на а}

end

end;

CloseFile(F); writeln('end'); End; Readln

end.

Совет:

Не стоит использовать процедуры прямого доступа при последовательной записи или последовательном считывании компонент, это увеличит время работы программы.