Предикаты для работы с файлами




В системе Турбо-Пролог имеются следующие предикаты для работы с файлами:

 

deletefile уничтожение файла

save сохранение файла

renamefile переименование файла

existfile тест на наличие файла с данным именем

flush сброс данных из внутреннего буфера

disk выбор дисковода и пути доступа

dir выдача каталога директории

 

Кратко опишем, как работают предикаты для работы с файлами. В при­веденных ниже примерах file _ domain является описываемым пользователем файловым доменом (как это сделать, будет пояснено в следующем разделе), a DOS_filename — именем, под которым файл фигурирует в директории на диске. В том случае, если пример не очевиден, он снабжается пояснениями.

 

- de1etefile(DOS_filename).

- save(DOSfilename). Сохраняет на диске утверждения динамической базы данных.

- renamefile(Old _ DOS _ filename,New _ DOS _ filename).

- existfile(DOSfilename). Предикат успешен в случае, если файл с именем, заданным переменной DOSfilename, присутствует в директории.

- flush(file _ domain). Этот предикат сбрасывает содержимое внутреннего бу­фера, отведенного для данного устройства записи.

- disk(Path). Если переменной Path присвоен корректный путь доступа, то заданная с его помощью директория становится те­кущей. Если же переменная Path не означена, то данный предикат присваи­вает Path путь доступа к текущей директории.

- dir(Path,Filespec,Filename). Переменной Path должен быть присвоен корректный путь доступа, переменная Filespec задает расширение представ­ляющей интерес группы файлов. Данный предикат выдает каталог имен файлов с заданным расширением; вы можете выбрать среди них нужный и на­жать Enter. Имя файла будет присвоено переменной File _ name.

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

 

Описание файлового домена

Для того чтобы использовать в программе файлы, необходимо снабдить ее описанием файлового домена. Описание одного файлового домена с име­нем datafile выглядит как

 

file = datafile

 

Это описание бросается в глаза, так как не похоже на описания доме­нов других типов. Куда более привычным кажется описание типа

 

name = symbol

 

где name является именем домена, a symbol — стандартным типом доменов Турбо-Пролога. При описании файловых доменов, однако, тип домена file за­дается по левую сторону от знака равенства, а имя домена datafile — по правую.

Символическое имя файла типа datafile из настоящего примера есть идентификатор, который в программе может быть логически отождествлен с DOS-овским именем файла (именем, которое можно видеть при выда­че каталога директории). Это символическое имя называют также логиче­ским именем файла.

В описании file можно указывать несколько символических имен, но само описание должно быть единственным. Если в программе вводится не­сколько символических имен файлов, то они разделяются между собой точкой с запятой (;):

 

file = datafilel; datafile2; datafile3

 

Это объявление декларирует 3 символических имени для последую­щего их отождест-вления с реальными файлами DOS.

 

Запись в файл

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

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

 

openwrite(datafile1,"FILE1.DAT").

 

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

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

 

existfile("FILEl.DAT")

 

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

 

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

 

writedevice(datafile1).

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

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

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

 

closefile(datafile).

 

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

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

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

 

openwrite(datafile1,"FILE1.DAT"),

writedevice(datafile1),

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

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

closefile(datafilel).

 

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

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

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

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

 

openread(datafile1,"FILE1.DAT")

 

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

 

readdevice(datafile1).

 

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

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

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

 

closefile(datafile1).

 

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

 

openread(datafilel,"FILE1.DAT"),

readdevice(datafilel),

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

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

closefile(datafilel).

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: