Программирование в Логике. Чанышев О.Г. - 16 стр.

UptoLike

Составители: 

31
readdevice(filein),
readln(Str1),
write(Str1)
....................
readdevice(filein2),
readln(Str),
write(Str),
.................
closefile(filein),
closefile(filein2),
closefile(fileout),
.................
Следует помнить, что при открытии файла предикатом
openwrite(SimbolicFileName,OSFileName) существующий файл
очищается, несуществующийсоздается. Для дозаписи сущест-
вующий файл открывается предикатом
openappend(SimbolicFileName,OSFileName).
Открыть файл для чтения и записи можно предикатом
openmodify(SimbolicFileName,OSFileName).
Когда вы работаете с файлом в режиме чтениязаписи, сле-
дует после каждой записи использовать предикат
flush(SimbolicFileName),
который вызывает принудительную
очистку буфера. Он полезен
также во время отладки программы, когда вы пишите некоторую
информацию для трассировки. (Flush существенно замедляет вы-
полнение программы.)
Для реализации нелинейного ("гипертекстового") доступа к
файлу используется предикат
filepos(SymbolicFileName,FilePosition,Mode),
перемещающий (шаблон (i,i,i)) и берущий (i,o,i) текущую позицию
в файле.
Параметр Mode определяет "точку отсчета" позиции:
0 – от начала файла,
1 – относительно текущей позиции
,
2 – относительно конца файла.
32
Предикат eof(SymbolicFileName) предназначен для контроля
конца файла.
domains
nondeterm repeat
читать_и_обработать_строки
обработать_строку(symbol)
....................
clauses
repeat.
repeat:-repeat.
читать_и_обработать_строки:-
repeat,
readln(f,S),
обработать_строку(S),
eof(f),!,closefile(f);!.
......................
Файлы можно копировать, переименовывать, удалять, ис-
кать.
copyfile(FromName, ToName)
renamefile(OldOSFileName, NewOSFileName)
deletefile(OSFileName)
searchfile(SearchPath, FileName, FoundName)
existfile(OSFileName)
3.6.2. Операции с именами файлов
Для работы с именами файлов используются предикаты:
filenameext(FullName,Name,Mask)-(i,o,o),(o,i,i)
filenamepath(FullName,Path,Name)- (i,o,o),(o,i,i)
Примеры:
filenameext с шаблоном (i,o,o):
filenameext("myprog.vpr",Name,Ext),
write("Name=",Name, "Ext=",Ext),nl,
Выход:
Name=myprog Ext=.vpr
     readdevice(filein),                                                 Предикат eof(SymbolicFileName) предназначен для контроля
     readln(Str1),                                                 конца файла.
     write(Str1)                                                         domains
     ....................                                                nondeterm repeat
     readdevice(filein2),                                                читать_и_обработать_строки
     readln(Str),                                                        обработать_строку(symbol)
     write(Str),                                                         ....................
     .................                                                   clauses
     closefile(filein),                                                  repeat.
     closefile(filein2),                                                 repeat:-repeat.
     closefile(fileout),                                                 читать_и_обработать_строки:-
     .................                                                   repeat,
     Следует помнить, что при открытии файла предикатом                  readln(f,S),
openwrite(SimbolicFileName,OSFileName) существующий файл                 обработать_строку(S),
очищается, несуществующий – создается. Для дозаписи сущест-              eof(f),!,closefile(f);!.
вующий файл открывается предикатом                                       ......................
           openappend(SimbolicFileName,OSFileName).                      Файлы можно копировать, переименовывать, удалять, ис-
                                                                   кать.
     Открыть файл для чтения и записи можно предикатом                   copyfile(FromName, ToName)
           openmodify(SimbolicFileName,OSFileName).                      renamefile(OldOSFileName, NewOSFileName)
      Когда вы работаете с файлом в режиме чтения – записи, сле-         deletefile(OSFileName)
дует после каждой записи использовать предикат                           searchfile(SearchPath, FileName, FoundName)
                                                                         existfile(OSFileName)
                    flush(SimbolicFileName),
который вызывает принудительную очистку буфера. Он полезен              3.6.2. Операции с именами файлов
также во время отладки программы, когда вы пишите некоторую
информацию для трассировки. (Flush существенно замедляет вы-            Для работы с именами файлов используются предикаты:
полнение программы.)                                                    filenameext(FullName,Name,Mask)-(i,o,o),(o,i,i)
     Для реализации нелинейного ("гипертекстового") доступа к           filenamepath(FullName,Path,Name)- (i,o,o),(o,i,i)
файлу используется предикат
                                                                        Примеры:
          filepos(SymbolicFileName,FilePosition,Mode),                  filenameext с шаблоном (i,o,o):
перемещающий (шаблон (i,i,i)) и берущий (i,o,i) текущую позицию         filenameext("myprog.vpr",Name,Ext),
в файле.                                                                write("Name=",Name, "Ext=",Ext),nl,
     Параметр Mode определяет "точку отсчета" позиции:                  Выход:
     0 – от начала файла,                                               Name=myprog Ext=.vpr
     1 – относительно текущей позиции,
     2 – относительно конца файла.

                              31                                                                 32