Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб 4 - 6(задания).doc
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
313.34 Кб
Скачать

Запись в файл

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

  1. Открытие файла. Предикат

openwrite(datafile1,"FILE1.DAT").

где datafilel есть введенный пользователем файловый домен, а FILE1.DAT — имя файла в DOS, устанавливает связь между объектами datafilel и FILE1.DAT. Теперь ссылки на datafilel будут означать обращение к FILE1.DAT. Связь остается в силе вплоть до закрытия файла.

Заметим, что если файл с именем FILE1.DAT к моменту вызова преди­ката openwrite уже присутствовал в директории, то его содержимое будет утрачено. Для того чтобы застраховаться от этой неприятности, можно сначала проверить наличие файла при помощи предиката

existfile("FILEl.DAT")

и принять соответствующие меры, если existfile будет успешен.

  1. Назначение файла в качестве устройства записи. Данную операцию проделает предикат

writedevice(datafile1).

  1. Сама запись в файл. Можно использовать любые подходящие для этой цели предикаты, например write или writef. Любой предикат write будет те­перь выводить информацию не на экран, а в файл.

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

  3. Закрытие файла. Этой цели служит предикат

closefile(datafile).

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

Еще одним следствием закрытия файла является перевод указателя фай­ла в начало. Это может понадобиться при повторном открытии файла.

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

openwrite(datafile1,"FILE1.DAT"),

writedevice(datafile1),

< любые правила или предикаты записи в файл >

< любые другие правила или предикаты >

closefile(datafilel).

Чтение из файла

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

Для чтения данных из файла требуется:

  1. Открытие файла

openread(datafile1,"FILE1.DAT")

  1. Назначение файла устройством чтения

readdevice(datafile1).

  1. Само чтение из файла при помощи соответсвующего предиката или пра­вила.

  2. Использование произвольных предикатов и правил, отвечающих целям программы.

  3. Закрытие файла

closefile(datafile1).

Иллюстрацией может служить

openread(datafilel,"FILE1.DAT"),

readdevice(datafilel),

< любые правила или предикаты чтения из файла >

< любые другие правила или предикаты >

closefile(datafilel).

Модификация существующего файла

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

Предикат

openmodify(datafilel,"FILE1.DAT")

успешен только в том случае, если файл уже присутствует на диске. Други­ми словами, файл должен быть создан при помощи предиката openwrite. При этом следует, конечно, помнить, что openwrite создает новый файл даже тог­да, когда файл с таким именем уже имеется, затирая при этом все, что в нем находилось.

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

Когда файл открывается для модификации, указатель помещается в на­чало файла. Турбо-Пролог позволяет смещать указатель при помощи преди­ката filepos, который будет подробно рассмотрен в разделе, посвященном файлам прямого доступа. В настоящий момент вам требуется знать лишь то, где будет располагаться указатель после вызова openmodify.

Модификацию файла можно разбить на следующие шаги:

  1. Открытие файла

openwodify(datafilel."FILE1.DAT")

  1. Переадресация вывода в файл

writedevice(datafilel)

  1. Запись в файл новых данных.

  2. Использование произвольных предикатов и правил, отвечающих целям программы.

  3. Закрытие файла

closefile(datafilel)

Примером может служить

openmodify(datafile1."FILE1.DAT"),

wr1tedev1ce(datafilel),

< правила для выборочной записи в файл >,

< любые другие правила или предикаты >

closefile(datafilel).