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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

openmodify(<символическое имя файла>, <имя_DOS_файла>).

Пример(datafile1,"file4.dat")

Предикат успешен только в том случае, если файл уже присутствует на диске.

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

Указатель файла может быть помещен в любую позицию. Файлы с такой организацией доступа к хранящейся в ней информации называются файлами прямого доступа, а операции выборки из такого файла - вводом-выводом из файла прямого доступа.

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

filepos(<символическое_имя_файла>, <позиция_указателя>, <тип_смещения>).

Параметру <позиция_указателя> здесь должно быть присвоено действительное число, обозначающее позицию в файле, из которой будет считан или в которую будет записан символ (дробная часть числа отбрасывается).

Параметру <тип_смещения> может быть присвоено одно из трех значений: 0, 1 или 2. Эти значения определяют то, как будет интерпретировано значение <позиция_указателя>. В табл. 1 пояснено употребление каждого допустимого значения параметра <тип_смещения>.

база данные файл диск

Таблица 1

Режимы работы предиката filepos

Тип смещения Действия системы
0 Смещение берется относительно начала файла
1 Смещение берется относительно текущей позиции
2 Смещение берется относительно конца файла

 

Рассмотрим, для примера, такое употребление предиката filepos:(datafile1,100,0).

В этом выражении datafile1 есть имя логического файла. Параметр <позиция_указателя> имеет значение 100, что указывает на то, что будет прочитан символ, стоящий в 100-й позиции (101-й символ). Значение 0 параметра <тип_смещения> свидетельствует о том, что сотая позиция будет отсчитываться от начала файла.

Если в этой записи 0 заменить на 1,

filepos(datafile1,100,1),

то отсчет будет вестись уже относительно текущей позиции указателя. Если данный предикат будет успешен, то указатель сдвинется еще на 100 позиций вперед.

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

 

Этой цели служит предикат

closefile(<символическое имя файла>).

Например,(datafile1).

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

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

Переадресация ввода-вывода

 

Встроенный предикат Турбо-Пролога readdevice позволяет переадресовать логическое устройство ввода. Аналогично встроенный предикат writedevice осуществляет переадресацию устройства вывода информации.

Так предикат(myfile)

настраивает устройство ввода на файл myfile, а предикат(yourfile)

настраивает устройство вывода на файл yourfile.

Для настройки ввода и вывода на стандартные устройства в Турбо-Прологе используются стандартные имена screen, keyboard, printer. Например, правило_lines:- writedevice(screen), write(" Первая строка "),, writedevice(printer),(" Первая строка"),nl,

flush(printer), writedevice(screen).

выводит строку " Первая строка " на экран монитора, а затем эту же строку выводит на принтер. Стандартный предикат flush здесь используется для того, чтобы строка была выведена из буфера сразу на принтер.

Другие полезные предикаты

 

Предикат eof производит проверку на достижение конца файла

eof(<символическое_имя_файла>)

Для автоматизации процесса открытия различных файлов бывает полезно использования операций конкатенации строковых переменных, для чего в Турбо-Прологе используют стандартный предикат concat:

concat(<строка1>,<строка2>, <новая_строка>).



Поделиться:


Последнее изменение этой страницы: 2020-03-14; просмотров: 97; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.58.151.231 (0.007 с.)