Файлы Лекция 11
План Стандартные устройства Стандартные предикаты по работе с файлами Замена стандартного предиката openread Вывод файла на экран Создание файла из символов, вводимых с клавиатуры Вывод файла на экран и принтер Копирование файла с заменой всех английских букв на заглавные
Стандартные устройства stdin (стандартное устройство ввода); stdout (стандартное устройство вывода); stderror (стандартное устройство вывода сообщений об ошибках); keyboard (клавиатура); screen (монитор); printer (параллельный порт принтера); coml (последовательный порт).
Стандартные предикаты по работе с файлами openread openwrite openappend openmodify existfile closefile renamefile deletefile disk dir eof filepos readdevice write readln, readchar, readint, readterm file_str flush filemode
Замена стандартного предиката openread openFile(F,N):– existfile(N),!, openread(F,N). openFile(_,N):– write("Файл с именем ",N," не найден!").
Вывод файла на экран DOMAINS file = f PREDICATES write_file(file) writeFile(string) CLAUSES write_file(f):– not(eof(f)),!, readchar(C), write(C, "), write_file(f). write_file(_). writeFile(F_N):– existfile(F_N),!, openread(f,F_N), readdevice(f), write_file(f), closefile(f), readdevice(keyboard), nl,nl, write("Нажмите любую клавишу"), readchar(_). writeFile(F_N):– write("Файл с именем ",F_N," не найден!"). GOAL write("Введите имя файла: "), readln(F_N), writeFile(F_N).
Создание файла из символов, вводимых с клавиатуры DOMAINS file=f PREDICATES Readfile CLAUSES readfile:– writedevice(screen), write("Введите символ (# конец ввода)"), nl, readchar(C), write(C), C'#',!, writedevice(f), write(C), readfile. readfile:– closefile(f). GOAL write("Введите имя файла: "), readln(F_N), openwrite(f,F_N), readfile(f).
Вывод файла на экран и принтер writeFile_to_scr_and_pr(f):– not(eof(f)),!, readchar(C), write(C), writedevice(printer), write(C), flush(printer), writedevice(screen), writeFile_to_scr_and_pr(f). writeFile_to_scr_and_pr:– closefile(f).
Копирование файла с заменой всех английских букв на заглавные transform:– not(eof(f)),!, readln(S), upper_lower(S_U,S), write(S_U),nl, transform. transform:– closefile(f), closefile(f_o). upper_file(N_F,N_o_F):– existfile(N_F),!, openread(f,N_F), readdevice(f), openwrite(f_o,N_o_F), writedevice(f_o), transform. upper_file(N_F,_):– write("Файл с именем ",N_F," не наден!").
Задача для самостоятельного решения 1.Напишите замену для стандартного предиката openwrite, который будет открывать файл на запись, если файл существует, и выводить соответствующее сообщение, если он отсутствует. 2.Напишите замену для стандартного предиката openmodify, который будет открывать файл на чтение и запись, если файл существует, и выводить соответствующее сообщение, если файл отсутствует. 3.Напишите замену для стандартного предиката openappend, который будет открывать файл на дозапись, если файл существует, и выводить соответствующее сообщение, если он отсутствует. 4.Создайте предикат, осуществляющий переписывание из одного файла, содержащего числа, в другой файл только тех чисел, которые являются четными. 5.Создайте предикат, вычисляющий количество отрицательных чисел в файле. 6.Создайте предикат, вычисляющий сумму чисел, хранящихся в файле. 7.Создайте предикат, вычисляющий количество чисел, меньших среднего арифметического значения всех чисел в файле. 8.Создайте предикат, формирующий из текста, хранящегося в файле, список слов, в которых имеются повторяющиеся символы. 9.Создайте предикат, дополняющий все строки, хранящиеся в файле, символом "*" до самой длинной строки.