Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 8:

Буферизированный (потоковый) ввод-вывод. Часть III

8.9. Приложение № 6. Предикаты файлового ввода-вывода на языке Turbo Prolog

ФУНКЦИЯ OPENREAD
СИНТАКСИС: openread(SymbolicFileName, DosFileName), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • string DosFileName - текстовая строка с полным или кратким именем файла;
ШАБЛОНЫ: (i, i) ;
НАЗНАЧЕНИЕ: Функция открывает для чтения файл;
ОПИСАНИЕ: Функция открывает для чтения файл, имя которого указано в переменной "DosFileName", и связывает с ним переменную - дескриптор "SymbolicFileName" ;

ФУНКЦИЯ OPENWRITE
СИНТАКСИС: openwrite(SymbolicFileName, DosFileName), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • string DosFileName - текстовая строка с полным или кратким именем файла;
ШАБЛОНЫ: (i, i);
НАЗНАЧЕНИЕ: Функция открывает файл для записи;
ОПИСАНИЕ: Функция открывает файл для записи, имя которого указано в переменной "DosFileName", и связывает с ним переменную - дескриптор "SymbolicFileName" ;

ФУНКЦИЯ OPENAPPEND
СИНТАКСИС: openappend(SymbolicFileName, DosFileName), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • string DosFileName - текстовая строка с полным или кратким именем файла;
ШАБЛОНЫ: (i, i);
НАЗНАЧЕНИЕ: Функция открывает файл для добавления в его конец данных;
ОПИСАНИЕ: Функция открывает файл для добавления в его конец данных, имя которого указано в переменной "DosFileName", и связывает с ним переменную - дескриптор "SymbolicFileName" ;

ФУНКЦИЯ OPENMODIFY
СИНТАКСИС: openmodify(SymbolicFileName, DosFileName), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • string DosFileName - текстовая строка с полным или кратким именем файла;
ШАБЛОНЫ: (i, i);
НАЗНАЧЕНИЕ: Функция открывает для изменения файл;
ОПИСАНИЕ: Функция открывает для изменения файл, имя которого указано в переменной "DosFileName", и связывает с ним переменную - дескриптор "SymbolicFileName" ;

ФУНКЦИЯ READDEVICE
СИНТАКСИС: readdevice(SymbolicFileName), где file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
НАЗНАЧЕНИЕ: Устанавливает или выдаёт текущее устройство ввода;
ШАБЛОНЫ: (i), (o);
ОПИСАНИЕ: (i): Переназначает текущее устройство ввода на открытый файл с данными "SymbolicFileName". Открываемый файл может быть один из стандартных файлов или любой файл пользователя, открытый для чтения или модификации;

(o): Связывает "SymbolicFileName" с именем текущего устройства ввода. Стандартные файлы, которые могут быть открыты для ввода:

  • com1 чтение из последовательного порта связи;
  • keyboard чтение с клавиатуры (по умолчанию);
  • stdin чтение из стандартного ввода DOS;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1011 Попытка назначить устройство ввода из файла, который не находится ни в режиме ввода, ни в режиме модификации.

ФУНКЦИЯ WRITEDEVICE
СИНТАКСИС: writedevice(SymbolicFileName), где file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
НАЗНАЧЕНИЕ: Устанавливает или выдаёт текущее устройство вывода;
ШАБЛОНЫ: (i), (o);
ОПИСАНИЕ: (i): Переназначает текущее устройство вывода в открытый файл с данными "SymbolicFileName". Открытый файл может быть одним из стандартных символических файлов или любым пользовательским файлом, открытым для записи или для модификации;

(o): Связывает "SymbolicFileName" с именем текущего устройства вывода. Встроенными файлами, которые могут быть использованы для вывода, являются:

  • com1 запись в последовательный порт связи;
  • printer запись в параллельный порт принтера;
  • screen вывод на экран монитора;
  • stdout запись в стандартный поток вывода;
  • stderr запись в стандартный поток ошибок;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1012 Попытка переназначить устройство вывода в файл, который не находится ни в режиме записи, ни в режиме модификации (добавления);

ФУНКЦИЯ FILEMODE
СИНТАКСИС: filemode(SymbolicFileName, FileMode), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • integer FileMode - режим работы файла: 0 - текстовый режим, 1 - двоичный режим;
НАЗНАЧЕНИЕ: Обеспечивает доступ к двоичным файлам;
ШАБЛОНЫ: (i, i), (i, o);
ОПИСАНИЕ: (i, i): Устанавливает файлу "SymbolicFileName" режим, указанный в "FileMode" ;

(i, o): Возвращает текущий режим файла "SymbolicFileName" в "FileMode" ;

НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1018 Файл не открыт;

1019 Недопустимый режим файла, должен быть 0 или 1;

ПРИМЕЧАНИЕ: "FileMode" = 0 (Текстовый режим): Символ возврата каретки, CR (ASCII 13) [клавиша "Enter" ] подавляется с помощью программ стандартного ввода ( readchar, readln… ). CR помещается перед каждым LF (переводом строки) предикатами вывода. Символ, получаемый комбинацией клавиш Ctrl-Z, и физический конец файла совпадают;

"FileMode" = 1 (Двоичный режим): В этом режиме не производятся никакие преобразования. Для операций ввода может быть использован только предикат readchar ;

ФУНКЦИЯ: CLOSEFILE
СИНТАКСИС: closefile(SymbolicFileName), где file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
НАЗНАЧЕНИЕ: Функция закрывает файл;
ШАБЛОНЫ: (i) ;
ОПИСАНИЕ: Функция closefile закрывает файл, открытый с именем "SymbolicFileName". Предикат closefile согласовывается, даже если файл не был открыт;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: Отсутствуют;

ФУНКЦИЯ: FILEPOS
СИНТАКСИС: filepos(SymbolicFileName, FilePosition, Mode), где
  • file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
  • real FilePosition - позиция ввода-вывода в указанном файле;
  • integer Mode - режим начала отсчёта позиции;
НАЗНАЧЕНИЕ: Функция перемещает указатель файла;
ШАБЛОНЫ: (i, i, i), (i, o, i) ;
ОПИСАНИЕ: (i, i, i): Функция filepos выбирает позицию в указанном файле, где происходит следующая операция обработки содержимого файла;

Позиция рассчитывается согласно значению "Mode";

Режим Позиция
0 Относительно начала файла
1 Относительно текущей позиции
2 Относительно конца файла

Например, если переменная "FilePosition" связана со значением 11 и переменная "Mode" связана со значением 0, следующая операция (чтение или запись) будет происходить в позиции 11 (относительно начала файла);

(i , o, i): Возвращает текущую относительную позицию файла от начала файла. Переменная "Mode" игнорируется при этом шаблоне описания аргументов;

При использовании filepos имейте в виду, что операционная система при каждом нажатии клавиши "Enter" в текстовых файлах, генерирует два символа - "возврат каретки" (ASCII 13) и "перевод строки" (ASCII 10). При чтении Турбо Прологом строк из таких файлов эти символы автоматически пропускаются, но их необходимо учитывать при использовании filepos ;

НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1018 Файл не открыт;

1070 Невозможно выполнить предикат;

ФУНКЦИЯ: EOF
СИНТАКСИС: eof(SymbolicFileName), где file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
НАЗНАЧЕНИЕ: Функция контролирует конец файла;
ШАБЛОНЫ: (i) ;
ОПИСАНИЕ: Функция eof проверяет, не указывает ли указатель текущей позиции на конец файла. Если да, то предикат eof согласовывается, иначе предикат даёт неудачное завершение;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Не конец файла;
ОШИБКИ: Отсутствуют;

ФУНКЦИЯ: FLUSH
СИНТАКСИС: flush(SymbolicFileName), где file SymbolicFileName - переменная типа "файл", связанная с открытым потоком;
НАЗНАЧЕНИЕ: Функция записывает на диск файловый буфер Турбо Пролога;
ШАБЛОНЫ: (i) ;
ОПИСАНИЕ: Функция flush инициирует запись содержимого внутреннего файлового буфера системы Турбо Пролог на текущее записывающее устройство. Функция flush полезна, например, когда вывод происходит на последовательный порт, и имеется необходимость посылать данные в порт до заполнения буфера;

Примечание: Из-за ограничений операционной системы flush не обеспечивает защиту файла в операционной системе. Обеспечить целостность файла можно путём закрытия его и последующего открытия вновь;

НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Подобно write ;
ОШИБКИ: Подобно write (смотри "Буферизированный (потоковый) ввод-вывод. Часть II" );

ФУНКЦИЯ: EXISTFILE
СИНТАКСИС: existfile(DosFileName), где string DosFileName - имя файла с расширением (в полной или краткой форме);
НАЗНАЧЕНИЕ: Проверяет, существует ли файл в текущем каталоге
ШАБЛОНЫ: (i) ;
ОПИСАНИЕ: Функция existfile согласовывается, если файл "DosFileName" присутствует в каталоге активного диска (смотри disk в руководстве пользователя Turbo Prolog 2.0 или его online справке);
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Если файл не существует;
ОШИБКИ: Отсутствуют;

ФУНКЦИЯ: DELETEFILE
СИНТАКСИС: deletefile(DosFileName), где string DosFileName - имя файла с расширением (в полной или краткой форме);
НАЗНАЧЕНИЕ: Уничтожает файл;
ШАБЛОНЫ: (i) ;
ОПИСАНИЕ: Функция deletefile уничтожает файл, имя которого находится в переменной "DosFileName", на текущем диске;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1072 Невозможно уничтожить файл;

ФУНКЦИЯ: RENAMEFILE
СИНТАКСИС: renamefile(OldDosFileName, NewDosFileName), где
  • string OldDosFileName - имя файла с расширением (в полной или краткой форме);
  • string NewDosFileName - имя файла с расширением (в полной или краткой форме);
НАЗНАЧЕНИЕ: Переименовывает файл;
ШАБЛОНЫ: (i, i) ;
ОПИСАНИЕ: renamefile изменяет имя, указанное в переменной "OldDosFileName" (на текущем диске), на имя, указанное в переменной "NewDosFileName" ;
НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1073 Невозможно переименовать файл;

ФУНКЦИЯ: FILE_STR
СИНТАКСИС: file_str( DosFileName, TextString ), где
  • string DosFileName - имя файла с расширением (в полной или краткой форме);
  • string TextString - текстовая строка, вмещающая в себя содержимое файла;
НАЗНАЧЕНИЕ: Записывает из строки или считывает в строку дисковый файл полностью;
ШАБЛОНЫ: (i, o), (i, i) ;
ОПИСАНИЕ: (i, o): Весь файл "DosFileName" (максимальный размер 64К) будет считан в строку "TextString" ;

(i, i): Будет создан новый текстовый файл "DosFileName", содержащий текст "TextString" ;

НЕУДАЧНОЕ ЗАВЕРШЕНИЕ: Никогда не даёт;
ОШИБКИ: 1026 Размер файла, загружаемого предикатом file_str, превышает 64К;

1027 Невозможно открыть файл;

1028 Запись в файл невозможна;

Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Олег Корсак
Олег Корсак
Латвия, Рига