Пятница, 03.05.2024, 15:46
Приветствую Вас Гость | RSS

Язык программирования ПРОЛОГ

Работа с файлами

Использование файлов на внешнем носителе

ТП позволяет переадресовывать логические устройства ввода-вывода с помощью двух встроенных предикатов

readdevice (СимвИмяФайла) (symbol) : (i) (o)

Определяет или считывает символьное имя файла для устройства ввода.

(i) – связывает текущее устройство чтения с открытым файлом. Под СимвИменемФайла понимается символьное имя клавиатуоы либо симвоьное имя файла, открытого для чтения или модификации.

(o) – связывеат символьное имя файла с именем текущего устройства чтения, которое может быть клавиатурой или файла.

readdevice (X) X=клавиатура

writedevice (СимвИмяФайла) (symbol) : (i) (o)

Определяет или считывает символьное имя файла для устройства вывода.

(i) – переназначает текущее устройство записи на открытый файл с именем СимвИмяФайла, который может быть одним из заранее определенных символьных имен (screen или printer) или имеет символьное имя, задаваемое пользоваетелем для файла, открытого для записи или модификации.

(o) – связывает параметр СимвИмяФайла с именем текущего устрйоства записи, которое может иметь имя screen, printer или символьное имя файла.

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

Для того, чтобы использовать в прграмме файлы, необходимо в раздел domains произвести описание файлового домена:

file = datafile

file – стандартный тип домена

datafile – символьное имя файла (логическое имя файла)

В файл описания логично указать несколько символьных имен, но само описание должно быть единственным.

file = df1; df2; df3   % (; или)

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

Удаление файлов

deletefile (ИмяФайлаДОС) (string) : (i)

Параметр ИмяФайлаДОС может создать имя накопителя, но не должен указывать путь.

deletefile ("C: progr.pro”)

Сохранение файла

save (ИмяФайлаДОС) (string) : (i)

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

Переименование файлов

renamefile (СтИмяФДОС, НовИмяФДОС) (string, string) : (i, i)

Проверка наличия файла

existfile (ИФД) (string) : (i)

Выполняется успешно, если заданный файл имеется в текущем каталоге.

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

flash (СимвИФ) (file) : (i)

Позволяет организовывать передачу данных на стандартный интерфейс до того, как буфер будет заполнен.

Установка накопителя и пути

disc (ПутьДОС) (string) : (i) (o)

(i)                  – устанавливает путь и накопитель

(o) – связывает с параметром текущий накопитель и путь.

Вывод текущего каталога

dir (Путь, СпецификацияФайла, ИФД) (string, string, string) : (i, i, o)

Выдается каталог имен файлов в соответствии с заданными параметрами и присваивается 3-му параметру имя выбранного из каталога файла.

dir ("E:\PROLOG”, "a*.*”, X)

Открытие файлов

-        для чтения : openread

-        для записи: openwrite

-        для чтения/записи : openmodify

-        для заполнения (до записи) : openappend.

Формат этих предикатов одинаков: (СИФ, ИФД) (file, string) : (i, i)

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

closefile (СИФ) (file) : (i)

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

Проверка на конец файла

eof (СИФ) (file) : (i)

Выполняется успешно, если указатель текущей позиции файла указывает на конец файла.

Установка или чтение типа файал

filemode (СИФ, тип) (file, integer) : (i, i) (i, o)

(i, i) – устанавливает тип файла ( 0 – текстовый, 1 – бинарный)

(i, o) – читает тип заданного файла и связывает его с параметром тип файла.

Устанвока или чтение позиции указателя файла

filepos (СИФ, Позиция, Режим) (file, real, integer) : (i, i, i) (i, o, i)

(i, i, i) – устанавливает указатель данного файла на заданню позицию (Режим=0 – относительно начала файла, =1 – текущей позиции, =2 – конца)

(i, o, i) – определяет позицию указателя относительно начала файла.

Чтение строки из файла

file_str (ИФД, Строка) (string, string) : (i, o) (i ,i)

(i, o) – читает строку из заданного файла и связывает ее с параметрм строка.

(

Максимально допустимый размер строки 64 кБайта. Признаком конца строки является символ Ctrl-Z (126).

Запись в файл

Последовательность действий, необходимая для записи в файл:

1.      Открытие файла с помощью предиката openwrite. Если файла с указанным именем нет, то создаетс яновый файл. Если файл уже есть, то его содержимое будет утрачено. Чтобы от этого застраховаться, можно сначала проверить наличие файла предикатом existfile, и принять соответствующие меры, если existfile будет успешным.

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

3.      Самма запись в файл write или writef.

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

5.      Закрытие файла предикатом closefile.

/* Вывод информации на экран дисплея в файл на диск */

domains

      str = string

      file = datafile

predicates

      data (str)

      write_lines

goal

      openwrite (data, "a1.dat”),

      write_lines,     

      closefile (datafile)

clauses

      data ("aaaa”).

      data ("bbbb”).

      data ("cccc”).

. . . . . . .

write_lines:- data (Line),

write (" ", Line), nl,

writedevice (screen),

fail,

write_lines.

/* Считывание данных с клавиатуры и запись их в файл */

domains

      file = datafile

      kstr, fstr = string

predicates

      readin (kstr, fstr) % чтение-запись

      create_file

goal

      create_file

clauses

      create_file:- nl, nl,

      write ("Введите имя файла”),

      nl, nl, readln(FileName),

openwrite (datafile),

writedevice (datafile),

readln (Kstr),

concat (Kstr, "\13\10”, Fstr),

readin (Kstr, FStr),

closefile (datafile).

readin (_, Fstr):- write (FStr), readln (KStr1),

concat (KStr1, "\13\10”, Fstr1),

readin (Kstr1, Fstr1).

Дружественные пользователю программы для обработки файлов

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

/* ввод данных с клавиатуры и запись их на диск */

domains

      file = datafile

      kstr, fstr = string

predicates

      write_message1

      check_for_ready

      give_instruction

      process_input_output

      process_file

      write_message2

      readin (kstr, fstr)

      create_a_file

goal

      create_a_file

clauses

      create_a_file:- write_message1,

      process_file, write_message2, nl, nl,

      write ("Нажмите любую клавишу”),

      readchar (_), exit.

      write_message1:- nl, write ("Эта программа вводит данны с клавиатуры "), nl,

write ("Вывод в файл”), nl.

process_file:- check_for_ready, give_instruction,

process_input_output.

check_for_ready:- write ("Нажмите клавишу”),

write ("Программа готова к вводу данных”), nl, readdevice (keyboard),

readchar (_).

give_instruction:- nl,

write ("Данные вводятся с клавиатуры”), nl,

write ("Наберите stop”), nl.

process_input_output:- write ("Введите имя файла”), nl,

readln (Filename), nl,

write ("Программа готова принять первую из вводимых строк”),

openwrite (datafile, Filename), writedevice (datafile),

readln (Kstr), concat (Kstr, "\13\10”, FStr),

readin (Kstr, Fstr), closefile (datafile).

write_message2:- writedevice (screen), nl,

write ("Данны записаны на диск”), nl

write ("Работа программы завершена”).

readin ("Stop”, _):- !.

readin (_, Fstr):- write (Fstr), readln (Kstr),

concat (Kstr1, "\13\10”, Fstr1),

writedevice (datafile),

readin (Kstr1, Fstr1).
Меню сайта
Форма входа
Поиск
Календарь
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Long Time Ago © 2024
Сделать бесплатный сайт с uCoz