Мои Конспекты
Главная | Обратная связь


Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

Лабораторная работа №7. Обработка файлов. Предикаты для работы с файлами



deletefile(DOS_filename)-удаление файла

save(DOS_filename) –сохранение файла

renamefile(old_DOS_filename, new_DOS_filename)-переименовыфвание файла

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) - открытие файла для чтения.

readdevice(datafile) -назначение файла устройством чтения

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),

openread(datafile,Filename),

write("Type 1n record number: "),nl,

readreal(Record),

Index = (Record - 1) * 40,

readdevice(datafile),

filepos(datafile,Index,0),

readln(Cstr),

write(Cstr), nl,nl,

write("Press the space bar."),nl,

readdevice(keyboard),

readchar(_),

closefile(datafile),

exit.

 




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







©2015-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.