42. Использование файлов прямого доступа
В разделе "Модификация уже существующего файла" говорилось, что каждый символ в файле занимает определенную позицию, которая характеризуется расстоянием, или смещением, от первого символа файла. Указатель файла может быть помещен в любую позицию, тем самым он определяет место, из которого будет считан или в которое будет записан следующий символ. Файлы с такой организацией доступа
к хранящейся в ней информации называются файлами прямого доступа, а операции выборки из такого файла - вводом-выводом из файла прямого доступа.
Произвольный доступ к файлам подобного рода делает возможным чтение и запись логических структур, таких как, например, записи, с любой позиции файла. В файлах, используемых
для этих целей, все записи имеют одинаковую длину. Когда указатель файла перемещается по позициям, номера которых кратны длине записи, он всегда указывает на начало очередной записи. Турбо-Пролог содержит два встроенных предиката, которые удобны для работы с файлами прямого доступа: openmodify и filepos. В настоящем разделе мы поясним, как нужно пользоваться ими.
Предположим, что вы хотите модифицировать файл с именем
PLAYERS.DAT. Тогда предикат openmodify необходимо записать в виде openmodify(players,"PLAYERS.DAT").
Символическое имя players обозначает логический файл
программы. Предикат openmodify связывает логическое имя файла с именем файла в DOS, так что впоследствии все ссылки на
players будут интерпретироваться как ссылки на PLAYERS.DAT.
(Само собой разумеется, что файл с таким именем уже должен
быть создан.)
Предикат filepos записывается в форме
filepos(Logical_filename,File_position,Mode).
Параметру File_position здесь должно быть присвоено
действительное число, обозначающее позицию в файле, из которой будет считан или в которую будет записан символ. (Дробная часть числа отбрасывается.)
Параметру Mode может быть присвоено одно из трех значений: 0, 1 или 2. Эти значения определяют то, как будет интерпретировано значение File_position. Ниже пояснено
употребление каждого допустимого значения параметра Mode.
_________________
0 │ Смещение берется относительно начала файла.
1 │ Смещение берется относительно текущей позиции.
2 │ Смещение берется относительно конца файла.________________________________________ Рассмотрим, для примера, такое употребление предиката
filepos:
filepos(players,100,0).
В этом выражении players есть имя логического файла. Параметр File_position имеет значение 100, что указывает на то, что будет прочитан символ, стоящий в 100-й позиции. Значение 0 параметра Mode свидетельствует о том, что сотня будет отсчитываться от начала файла.__
43. _Использование предикатов для работы с окнами. В систему программирования Турбо-Пролог включено пять предикатов, позволяющих программе управлять окнами различных размеров. Это предикаты makewindow, shiftwindow, removewindow,
clearwindow и gotowindow. С их помощью можно создавать несколько окон, выполнять ввод и вывод в определенные окна и устанавливать атрибуты окон.
Предикат makewindow является основой всех операций над окнами в Турбо-Прологе. Его синтаксическая форма:
makewindow(Window_number,
Screen_attribute,
Frame_attribute,
Frame_string,
Starting_row,
Starting_column,
Window_height,
Window_width)
Значения восьми параметров определяют характеристики окна.
Параметр Window_number, целое число, идентифицирует окно в программе. Это число используется в качестве ссылки предикатом
gotowindow и др. Целочисленное значение, присвоенное аргументу Screen_attribute, определяет цвета символов и фона. Выбираемые
значения атрибута зависят от того, какой монитор используется цветной или монохромный. Аргумент Starting_row предиката makewindow есть целое число, определяющее верхнюю строку (линию) создаваемого окна.
Аргумент Starting_column есть целое число, указывающее крайний левый столбец окна. Максимальное число столбцов, умещающихся на экране, 80. Аргумент Window_height есть целое число, определяющее количество строк, занимаемых создаваемым окном. Максимально возможное значение аргумента 25. И т.д.
Использование других предикатов для работы с окнами. Создание окна требует указания всех его атрибутов; для этого могут потребоваться определенные затраты времени. Однако
после того как атрибуты указаны, самая трудная часть работы может считаться выполненной. Предикаты, рассматриваемые в следующих секциях и используемые для различных методов управления окнами, обычно имеют не более одного аргумента.
Предикат shiftwindow используется для смены текущего окна (переключения). Его форма:
shiftwindow(Window_number)
Параметр Window_number является целым числом, приписываемым окну при его создании. (Это параметр Window_number предика-
та makewindow). Задание предиката shiftwindow(3) вызывает переназначение всех операций ввода и вывода в окно, с номером 3.
В то же время Турбо-Пролог "помнит" предыдущие окна и их атрибуты. Например, если окно 3 имеет такие атрибуты, что оно
будет перекрывать текущее окно (окно 4), то выполнение предиката shiftwindow(3) вызовет появление окна 3, в которое вложено окно 4. Информация из окна 4, частично закрытая окном 3, сохраняется и появится на экране, когда произойдет переключение и окно 4 вновь станет текущим.
Предикат gotowindow позволяет выполнять быстрое переключение между двумя окнами, которые не перекрываются. И т.д.
Использование окон для ввода и вывода
Стандартные предикаты ввода и вывода - read, readint,readchar, write и nl - также работают с любым текущим окном. Это означает, что предикаты ввода и вывода работают с любым окном, которое было сделано текущим при помощи makewindow, gotowindow или shiftwindow. По умолчанию предполагается, что курсор расположен в верхнем левом углу окна. Однако можно использовать предикат cursor
и помещать курсор в любую позицию текущего окна. Этот предикат имеет вид:
cursor(Row_number,Column_number).
Аргументы Row_number и Column_number являются целыми числами, задающими номера строки и столбца, по отношению к верхней
строке и крайнему левому столбцу экрана. Строки и столбцы нумеруются начиная с нуля: предикат cursor(0,0) обеспечивает вывод
текста, начиная с верхнего левого угла экрана. Если случайноуказывается позиция курсора, выходящая за рамки текущего окна, то во время выполнения программы Турбо-Пролог выдаст сообщение об ошибке.
- 40. Программы для обработки файлов.
- 41. Дозапись данных в файл
- 42. Использование файлов прямого доступа
- 44. Использование графики в программе
- 45. Использование звука и музыки
- 46. Базы данных в прологе. Предикаты динамическое бд.
- 48. Создание базы данных, располагающейся на диске.
- 51. Экспертная система на правилах