Турбо Пролог обеспечивает все возможности обработки информации,
содержащейся в файлах на внешних носителях. В языке ТП содержится
ряд стандартных предикатов, обеспечивающих создание, открытие и
закрытие файлов, чтение из файла и запись в файл.
Для открытия файлов в ТП существует четыре предиката:
openwrite(log_name, DOS_name),
openread(log_name, DOS_name),
openmodify(log_name, DOS_name),
openappend(log_name, DOS_name).
Предикаты open... устанавливают связь между внешним (для
Пролога) DOS-именем файла и его внутренним (логическим) именем,
используемым в пределах программы. Предикат openwrite создает
новый файл и открывает его для записи, предикат openread откры-
вает существующий файл для чтения, предикат openmodify откры-
вает файл для чтения и записи, а предикат openappend- для
добавления информации в конец существующего файла.
Для активизации объявленных файлов используются предикаты
writedevice и readdevice. Предикат writedevice (log_name) выпол-
няет переадресацию вывода в указанный файл, а предикат
readdevice (log_name) производит переадресацию ввода с ука-
занного файла. Для завершения работы с открытым ранее файлом
используется предикат closefile (log_name).
В ТП следующие имена стандартных устройств ввода-вывода
зарезервированы:
screen - стандартный вывод на экран (stdout);
keyboard - стандартный ввод с клавиатуры (stdin);
printer - вывод на устройство печати;
com1 - ввод-вывод через порт.
Все остальные логические имена будут восприниматься ТП
как имена файлов. Логические имена файлов должны быть объявлены
в разделе domains при помощи ключевого слова file, например:
file=inp_file1; inp_file2; out_file.
Строка объявления типа объектов file имеет две особенности.
Во-первых, ключевое слово file расположено, в отличие от описателей
других типов данных, в начале строки. Во-вторых, имена типов
разделяются точками с запятой, а не запятыми. Объявлять пере-
численные выше зарезервированные устройства ввод-вывода не тре-
буется.
Для выдачи информации на текущее устройство вывода используются
стандартные предикаты ТП:
write (A1, A2,...);
writef ("формат ", A1,A2,...),
здесь А1,А2,...-аргументы предикатов, которые могут принимать значения
констант или переменных, а "формат" - строка, описывающая формат
вывода. В строке формата могут быть использованы следующие параметры:
% d - число со знаком (для типов char и integer);
% u - число без знака (для типов char и integer);
% X - шестнадцатеричное число (тип string);
% x - шестнадцатеричное число (для типов char и integer);
% S - строка символов ( типы symbol и string);
% c - одиночный символ (типы char и integer);
% g - действительное число в минимальном формате (тип real);
% e - экспоненциальная форма действительного числа;
% f - действительное число с фиксированной точкой.
Кроме того, в предикатах вывода могут использоваться
следующие управляющие символы:
\n - переход на новую строку;
\t - табуляция вывода;
\xxx - вывод символа с кодом ххх.
Для приема информации различного типа с текущего устройства
ввода в ТП существует группа предикатов:
readchar (char),
readint (integer),
readln (string),
readreal (real),
которые выполняют ввод значений в переменные типов char, integer,
string и real соответственно.
Следующая программа демонстрирует использование предикатов ввода-
вывода.
domains
file = fl1 ; fl2
predicates
data(string)
clauses
data("Текст, заносимый в файл").
goal
write("Исходный текст : "),nl,
data(X), write(X), nl,
Write("Укажите имя выходного файла : "),
readln(Fname),
openwrite(fl1,Fname),
writedevice(fl1),
write(X),
closefile(fl1),
writedevice(screen),
write("Включите принтер и нажмите "),
readchar(_),
writedevice(printer),
openread(fl2,Fname),
readdevice(fl2),
readln(Y),
nl,write(Y),
closefile(fl2),
writedevice(screen),
readdevice(keyboard),nl,
write("Программа завершена").
|