Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекц по Visual Prolog.doc
Скачиваний:
4
Добавлен:
02.05.2019
Размер:
937.47 Кб
Скачать

9. Файли

9.1. Символічне ім’я файлу

Для роботи програми з файлом використовується ім’я файлу.

Ім’я файлу в програмі відрізняється від імені файлу в операційній системі. Ім'я файлу в програмі називають символічним ім'ям файлу або логічним ім’ям файлу. Символічне ім’я файлу призначається під час відкриття файлу і діє тільки під час роботи програми з файлом. Розглянемо причини введення символічного імені файлу.

Для прискорення роботи з файлом оперативні відомості про файл необхідно мати в програмі. Компілятор автоматично створює в програмі область для зберігання відомостей про файл. Для вказівки скільки таких областей треба зарезервувати і їх ідентифікації вводиться символічне ім’я.

Символічне ім’я визначається в секції Domains.

file = f1; f2; f3, де file - стандартний тип для файлів;

f1, f2, f3 - символічні імена.

Символічні імена мають тип symbol і відокремлюються друг від друга в описі „ ; ”. Таким чином, насправді, символічне ім’я – це ім’я області, що описує файл з яким буде працювати програма. Інформація, яка зберігається в області структурується. Поля структури можуть мати як статичну, так і динамічну інформацію.

При відкритті файлу між областю, що описує файл, і файлом встановлюється зв’язок і ім’я області стає символічним ім’ям файлу. Наприклад, відкрити файл -для читання:

Openread(Символічне ім'я файлу, Ім'я файлу в операційній системі)

При відкритті файлу з каталогу в структуру заноситься частина інформації, яка необхідна для роботи файлу. Для програмування необхідні такі поля структури: ім’я і розширення файлу в операційній системі, поточний покажчик на компоненту файлу, довжина компоненти, метод доступу до файлу.

Покажчик на компоненту файлу встановлюється при відкритті файлу. Він змінюється під час читання файлу або запису у файл. Довжина компоненти та метод доступу до файлу заносяться в структуру з опису файлу в програмі.

Після закриття файлу зв’язок між областю і файлом знищується. Тому одна область може використовуватися декількома файлами. Введення символічних імен дозволяє заощаджувати розмір пам'яті програми за рахунок використання однієї і тієї ж області для різних файлів.

9.2. Вхідний і вихідний потоки

На Пролозі обмін інформацією між програмою та пристроями і файлами виконується через потоки. У програмі існує один вхідний потік і один вихідний потік. Через вхідний потік дані поступають в програму, через вихідний потік дані виводяться з програми. Потік може призначатися на файл або пристрій. Таким чином одночасно можуть бути активними один вхідний і один вихідний файл або пристрій.

F1.dat F4.dat

F

Програма

2.dat Printer

keyboard ви Screen

F3.dat вхід вихід F5.dat

Перед призначенням вхідного або вихідного потоку на файл або пристрій, його треба відкрити для читання або запису предикатом відкриття файлу.

Призначення вхідного потоку виконують стандартним предикатом readdevice (символічне ім’я файлу або пристрою).

Режими: (і) призначає вхідний потік на файл або пристрій

(о) одержує символічне ім’я файлу або пристрою

Приклад1: do:- openread(f2, “F.dat”),readdevice(f2), readln(Str).

Приклад2: do:- openread(f2, “keyboard”),readdevice(f2), readln(Str).

Предикати призначення потоків дозволяють не вказувати у стандартних предикатах вводу-виводу ім’я файлу або пристрою.

Призначення вихідного потоку виконують предикатом

writedevice (символічне ім’я файлу або пристрою).

Режими: (і) призначає вихідний потік на файл або пристрій

(о) одержує символічне ім’я файлу або пристрою

Наприклад: do:- openwrite(f1, “F1.dat”),writedevice(f1), write(“125”).

По замовчанню вхідний потік призначається на клавіатуру: readdevice (keyboard); вихідний потік на екран: writedevice (screen).

Крім того можна використовувати ідентифікатори:

  • для читання на стандартний ввід stdin;

  • запис у стандартний вивід stdout;

  • запис на стандартний вивід повідомлень про помилки stderr.

Використання ідентифікаторів стандартних пристроїв у предикатах readdevice, writedevice, дозволяє не змінюючи програму змінювати стандартні пристрої. Для цього в командному рядку назначають для стандартного ідентифікатору інший пристрій.

При роботі з візуальним інтерфейсом можна використовувати тільки ідентифікатор screen.

Предикатами readdevice і writedevice можна перезначити потоки під час роботи програми. Наприклад, читати по черзі компоненти двох файлів.

Предикатами призначення потоків можна одержати поточне символьне ім'я файлу чи пристрою, на який призначено вхідний чи вихідний потік. Наприклад: readdivice (Dev). Змінна конкретизується поточним символічним ім’ям файлу чи пристрою.