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

16.2.1. Нетекстовые файлы.

Файлы – это последовательности элементов одного типа. Операции над файлами перечислены ниже.

Операция

Тип операнда -> Тип результата

REWRITE

FILE -> void

PUT

FILE -> void

RESET

FILE -> void

GET

FILE -> void

EOF

FILE -> BOOLEAN

Термин void (пустой) обозначает, что эти операции не возвращают значение, эти операции похожи на операторы процедур Паскаля и могут появляться везде, где может появляться оператор. Действие этих операций на состояние файла представлено конечным автоматом ниже, который имеет два состояния R и W.

Начальные RESET или REWRITE устанавливают файл в режим R или W.

REWRITE и PUT используются для построения файловых значений. REWRITE очищает файл и готовит его для записи.

REWRITE(F) = {(u,v): F не INPUT или OUTPUT и v = u за исключением того,

что v(F) = <<>, <>, W>}

Если файл открыт для записи, PUT добавляет значение переменной в буфере к файлу и оставляет значение переменной буфера неопределенной.

PUT(F) = {(u,v): u(F).3 = W и v = u, за исключением того, что v(F).1 = u(F).1u(F^)) и v(F^) неопределено}

PUT неопределен, когда файл не открыт для чтения.

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

VAR

IntList: FILE OF INTEGER;

BEGIN

REWRITE(IntList);

...

END

Значения присваиваются IntList^ таким образом, чтобы следующий оператор PUT добавит значение в IntList.

{Эквивалентно WRITE(IntList, 1)}

IntList^ := 1;

PUT(IntList); {Добавляет 1 в IntList, IntList^ неопрелен}

{Эквивалентно WRITE(IntList, 2)}

IntList^ := 2;

PUT(IntList); {Добавляет 2 в IntList, IntList^ неопрелен}

В этой точке IntList содержит значения 1 и 2 в списке прошлого, файл открыт для записи и содержимое IntList^ неопределено.

IntList = <<1, 2>, <>, W> и IntList^ неопределено

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

RESET(F) = = {(u,v): F не INPUT или OUTPUT и v = u за исключением того,

что v(F) = <<>, u(F).1 & u(F).2, R> и v(F^) = Θ(u(F).1 & u(F).2)}

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

Если файл открыт для чтения и его список будущего не пустой, GET переносит первый элемент списка будущего в список прошлого и присваивает значение нового первого элемента списка будущего переменной буфера.

GET(F) = {(u,v): u(F).3 = R и u(F).2  <> и v=u, за исключением того,

что v(F).1 = u(F).1 Θ (u(F.2))), v(F).2 = Λ (u(F.2)), и v(F^) = Θ (Λ (u(F.2)))}

Если файл не открыт для чтения, программа при вызове GET выдает ошибку времени выполнения, также ошибка произойдет, если не осталось данных для считывания (список будущего пуст).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]