- •Лабораторная работа № 4 Работа со списками
- •3.1 Длина строки
- •3.2 Конкатенация строк
- •3.3. Создание подстрок
- •3.4. Преобразование данных
- •3.5. Преобразования, определяемые пользователем
- •3.6 Создание символьных префиксов
- •3.7. Преобразование строк
- •3.8. Формирование атомов из строк
- •Лабораторная работа № 5 Работа с файлами
- •4.1.Предикаты для работы с файлами
- •Описание файлового домена
- •Запись в файл
- •Чтение из файла
- •Модификация существующего файла
- •Дозапись в конец уже существующего файла
- •Лабораторная работа № 6 Структуры
- •Абстракция данных
Запись в файл
Перед тем как начать писать что-либо в файл, нужно сначала создать его. В Турбо-Прологе файлы создаются при помощи предиката openwrite. Опишем последовательность использования предиката openwrite и других действий, необходимых для записи в файл информации:
Открытие файла. Предикат
openwrite(datafile1,"FILE1.DAT").
где datafilel есть введенный пользователем файловый домен, а FILE1.DAT — имя файла в DOS, устанавливает связь между объектами datafilel и FILE1.DAT. Теперь ссылки на datafilel будут означать обращение к FILE1.DAT. Связь остается в силе вплоть до закрытия файла.
Заметим, что если файл с именем FILE1.DAT к моменту вызова предиката openwrite уже присутствовал в директории, то его содержимое будет утрачено. Для того чтобы застраховаться от этой неприятности, можно сначала проверить наличие файла при помощи предиката
existfile("FILEl.DAT")
и принять соответствующие меры, если existfile будет успешен.
Назначение файла в качестве устройства записи. Данную операцию проделает предикат
writedevice(datafile1).
Сама запись в файл. Можно использовать любые подходящие для этой цели предикаты, например write или writef. Любой предикат write будет теперь выводить информацию не на экран, а в файл.
Использование любых других предикатов и правил, отвечающих назначению программы. Примером может служить переадресация потока данных с экрана на принтер.
Закрытие файла. Этой цели служит предикат
closefile(datafile).
Когда файл закрыт, операции чтения или записи для него недопустимы. Закрытие файла также защищает содержимое файла от каких бы то ни было манипуляций; теперь возможны лишь операции с файлом в целом.
Еще одним следствием закрытия файла является перевод указателя файла в начало. Это может понадобиться при повторном открытии файла.
Ниже приведен пример фрагмента программы на Турбо-Прологе, поясняющий только что сказанное.
openwrite(datafile1,"FILE1.DAT"),
writedevice(datafile1),
< любые правила или предикаты записи в файл >
< любые другие правила или предикаты >
closefile(datafilel).
Чтение из файла
В случае если файл FILE1.DAT уже существует, то с ним можно произвести целый ряд операций. Можно считать из файла все содержащиеся в нем данные, можно считать данные выборочно, можно модифицировать их, а можно произвести дозапись новых данных в конец файла.
Для чтения данных из файла требуется:
Открытие файла
openread(datafile1,"FILE1.DAT")
Назначение файла устройством чтения
readdevice(datafile1).
Само чтение из файла при помощи соответсвующего предиката или правила.
Использование произвольных предикатов и правил, отвечающих целям программы.
Закрытие файла
closefile(datafile1).
Иллюстрацией может служить
openread(datafilel,"FILE1.DAT"),
readdevice(datafilel),
< любые правила или предикаты чтения из файла >
< любые другие правила или предикаты >
closefile(datafilel).
Модификация существующего файла
Последовательность действий, требуемых для модификации уже существующего файла, несколько отличается от той, которая необходима для записи в файл или чтения из него. Прежде всего файл должен быть открыт для модификации (т.е. для чтения и записи одновременно). Для этой цели служит предикат openmodify.
Предикат
openmodify(datafilel,"FILE1.DAT")
успешен только в том случае, если файл уже присутствует на диске. Другими словами, файл должен быть создан при помощи предиката openwrite. При этом следует, конечно, помнить, что openwrite создает новый файл даже тогда, когда файл с таким именем уже имеется, затирая при этом все, что в нем находилось.
Содержимое файла можно рассматривать как поток символов. Каждый символ находится в файле на какой-то позиции. Позиция определяется удаленностью от первого символа файла. Таким образом, первый символ в файле занимает нулевую позицию, второй — первую и т. д. Вообразим себе теперь невидимый указатель, который можно сместить на любую позицию файла. Этот указатель определяет позицию, из которой будет прочитан или в которую будет записан очередной символ.
Когда файл открывается для модификации, указатель помещается в начало файла. Турбо-Пролог позволяет смещать указатель при помощи предиката filepos, который будет подробно рассмотрен в разделе, посвященном файлам прямого доступа. В настоящий момент вам требуется знать лишь то, где будет располагаться указатель после вызова openmodify.
Модификацию файла можно разбить на следующие шаги:
Открытие файла
openwodify(datafilel."FILE1.DAT")
Переадресация вывода в файл
writedevice(datafilel)
Запись в файл новых данных.
Использование произвольных предикатов и правил, отвечающих целям программы.
Закрытие файла
closefile(datafilel)
Примером может служить
openmodify(datafile1."FILE1.DAT"),
wr1tedev1ce(datafilel),
< правила для выборочной записи в файл >,
< любые другие правила или предикаты >
closefile(datafilel).
