existfile(DOS_filename)-проверка на наличие файла с таким именем
flush(file_domain)-сброс данных из внутреннего буфера, отведенного для данного устройства записи
disk(Path) –выбор дисковода и пути доступа
dir(Path, File_spec, File_name) –Переменой Path должен быть присвоен корректный путь доступа, переменная File_spec задает расширение представляющей интерес группы файлов. Данный предикат выдает каталог имен файлов с заданным расширением; вы можете выбрать среди них нужный и нажать Enter. Имя файла будет присвоено переменой File_name.
При описании файловых доменов тип домена записывается по левую сторону от знака равенства, а имя доомена по правую.
Пример:
file=datafile
file=datafile1;datafile2
openwrite(datafile,filename) - открытие файла для записи или создание, где datafile- введеннный пользователем файловый домен, filename-имя файла в DOS, теперь ссылки на datafile будут означать обращение к filename.
writedevice(datafile) -назначение файла в качестве устройства записи
openread(datafile,filename) - открытие файла для чтения.
openmodify(datafile,filename) - открытие файла для редактирования, указатель помещается в начало файла, сместить указатель можно при помощи предиката filepos.
openappend(datafile,filename) - открытие файла для добавления данных в конец файла.
closefile(datafile) -закрытие файла
Рассмотрим примеры работы с файлами.
Пример 1. Вывести информацию на экран дисплея и в файл на диске.
Программа 27. Запись данных в файл
Domains
str = string
file = datafile
Predicates
data(str)
write_lines
Goal
openwrite(datafle,"file1.dat"),
write_lines,
closefile(datafile).
Clauses
data("Старому году оставьте печали,!").
data("Забудьте обиду, беду.").
data("Только успехов, здоровья и счастья,").
data("Мы Вам желаем в Новом году!").
write_lines:-
data(Line),
write(" ",Line),nl,
writedevice(datafile),
write(" ",Line),nl,
writedevice(screen), /*для вывода данных на экран*/
fail, write_lines.
Пример 2. Вывести данные файла на экран.
Программа 28. Чтение данныхиз файла
Domains
str = string
file = datafile
Predicates
read_write_lines
Goal
openread(datafile,"file1.dat"),
read_write_lines,
closefile(datafile).
Clauses
read_write_lines :-
readdevice(datafile),
not(eof(datafile)),
readln(Line),
writedevice(screen),
write(" ",Line),nl,
read_write_lines.
Пример 3. Записать в файл данные, вводимые с клавиатуры
Программа 29. Запись в файл данных, вводимых с клавиатуры
Domains
file = datafile
dstring, cstring = string
Predicates
readin(dstring,cstring)
create_a_file
Goal
create_a_file.
Clauses
create_a_file :-
nl,nl,
write("Пожалуйста, введите полное имя файла."),
nl,nl,
readln(Filename), openwrite(datafile,Filename),
writedevice(datafile),
readln(Dstr),
concat(Dstr,"\13\10",Cstr),
readin(Dstr,Cstr),
closefile(datafile).
readin("done",_) :- !.
/*ввод данных завершится после вода слова "done"*/
readin(_,Cstr) :-
write(Cstr),
readln(Dstrl),
concat(Dstrl, "\13\10",Cstr1),
writedevice(datafile),
readin(Dstrl,Cstr1).
Предикаты для работы с файлами прямого доступа
Openmodify(fn,filename)-связывает логическое имя файла fn с именем файла
Filepos(fn, pos, mode)-устанавливает указатель файла в заданную позицию
Таблица 12.
Действие системы при операциях с файлами прямого доступа
Режим mode
Действия системы
Смещение берется относительно начала файла
Смещение берется относительно текущей позиции
Смещение берется относительно конца файла
Пример 4. Данные, вводимые с клавиатуры, записать в файл прямого доступа.
Программа 30. Запись данных в файл прямого доступа
Domains
file = datafile
Predicates
create_a_random_access_file
write_read_more(real, string)
pad_str (strIng,string,integer)
Goal
create_a_random_access_file.
Clauses
create_a_random_access_file :-
write("Please enter filename:"),nl,
readln(Filename),
openwrite(datafile,Filename),
closefile(datafile),
openmodify(datafile,Filename),
write("Введите строку"),nl,
readln(Dstr),
write_read_more(0,Dstr),
closefile(datafile).
write_read_more(_,"done") :-
nl, write(" Press the space bar."),
readchar(_),exit.
write_read_more(Index,Dstr) :-
writedevice(datafile),
filepos(datafile,Index,0),
pad_str(Dstr,Padstr,38),
concat(Padstr, "\10\13", Cstr),
write(Cstr),
writedevice(screen),
write("Введите строку"),nl,
readln(Dstr1),
Index1 = Index + 40,
write_read_more (Index1, Dstr1).
pad_str (Instr,Instr,Length) :-
str_len(Instr,Testlength),
Testlength >= Length,!.
pad_str (Instr,Padstr,Length) :-
concat(Instr,"-",Newstr),
pad_str(Newstr,Padstr,Length).
Пример 5. Вывести на экран заданную строку файла прямого доступа и выдача их на экран
Программа 31. Вывод данных из файла прямого доступа
Domains
file = datafile
Predicates
read_a_random_access_file
Goal
read_a_random_access_file.
Clauses
read_a_random_access_file:-
write("Please enter filename:"), nl, readln(Filename),