русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Робота з файлом прямим методом доступу


Дата додавання: 2013-12-24; переглядів: 2113.


ФАЙЛИ

9.1. СИМВОЛІЧНЕ ІМ’Я ФАЙЛУ

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

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

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

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

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

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

 

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

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

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

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

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

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

 

9.2. ВХІДНИЙ І ВИХІДНИЙ ПОТОКИ

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

F1.dat F4.dat

Програма
F2.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). Змінна конкретизується поточним символічним ім’ям файлу чи пристрою.

 

 

9.3. ОРГАНІЗАЦІЯ ФАЙЛУ ТА МЕТОДИ ДОСТУПУ ДО ФАЙЛУ

Тип предикату вводу, яким вводиться компонента файлу в програму, повинен відповідати типу компоненти файлу. Тобто, для роботи з файлом треба знати його організацію. Наприклад: Файл містить цілі числа. Програма читає компоненту файлу – ціле число предикатом readint. Від організації файлу залежить метод доступу до файлу.

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

Кожен з методів вимагає своїх предикатів відкриття файлу.

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

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

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

9.4. РОБОТА З ФАЙЛАМИ РІЗНИМИ МЕТОДАМИ ДОСТУПУ

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

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

Відкриття файлів для утворення файлу послідовним методом доступу

Предикат openwrite (Симв_ім'я, Ім'я_файлу_в_ОС) використовують для послідовного запису і перезапису файлу.

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

Утворення файлу послідовним методом доступу

Розглянемо на прикладі програми, які дії виконують при утворенні файлу послідовним методом доступу.

Завдання. Ввести компоненти файлу з клавіатури і записати їх у файл (утворення файлу).

Domains

File = f

 

Predicates

Do

repeat

do1

Goal

openwrite (f, ”F.dat” ), writedevice (f), do, closefile (f).

Clauses

Repeat.

Repeat: - Repeat.

Do: - repeat, readln (Y), do1(Y),Y=””.

Do1(Y):- Y= “”;

Write(Y).

Процедура виконує дії:

Ø відкриває файл для запису послідовним методом доступу;

Ø призначає вихідний потік на файл;

Ø вводить компоненти з клавіатури;

Ø записує компоненти у файл;

Ø По закінченню компонент файл закривається.

Ввід виконується до введення ознаки кінця вводу(порожній рядок).

Відкриття файлів для читання файлу послідовним методом доступу

Предикат Openread (Символічне ім'я, Ім'я_файлу_в_ОС) використовують для послідовного читання існуючого файлу. Покажчик на компоненту файла встановлюється в нульове положення.

Читання файлу послідовним методом доступу

Розглянемо на прикладі програми, які дії виконують при читанні файлу послідовним методом доступу.

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

Предикат EOF(Символічне ім'я) перевіряє на досягнення позиції кінця файлу.

Завдання. Прочитати компоненти файлу і вивести їх на екран.

Domains

File = f

Predicates

Do

Goal

openread (f, ”F.dat” ), readdevice (f), do, closefile (f).

Clauses

Do: - eof (f);

readln (Y), write(Y), do.

Процедура виконує дії:

Ø відкриває файл для читання послідовним методом доступу;

Ø призначає вхідний потік на файл;

Ø читає компоненти до введення ознаки кінця файлу;

Ø виводить компоненти на екран;

Ø закриває файл.

Дозапис файлу послідовним методом доступу

Предикатopenappend (Символічне ім'я, Ім'я_файлу_в_ОС) – використовують для дозапису файлу послідовним методом доступу. Покажчик в файлі установлюється на кінець файлу (ознаку eof).

Наприклад: openappend (f, ”F.dat” )

Дії, що виконуються при до запису аналогічні діям при запису у файл.

Відкриття файлу для прямого методу доступу

Предикат openmodify (Символічне ім'я, Ім'я_файлу_в_ОС) використовують для відкриття файлу прямим методом доступу, як для запису, так і для читання.

Файл повинен існувати. Тому, якщо файл не існує, перед відкриттям файлу для прямого методу доступу треба зробити порожній файл. Нижче подано приклад утворення порожнього файлу.

Domains

file = f

Predicates

Do

Goal

Do.

Clauses

do:- openwrite (f, ”F.dat”), closefile(f), openmodify(f, “F.dat”),….

Файл, що існує при відкритті для прямого методу доступу, не перезаписується.


<== попередня лекція | наступна лекція ==>
Типи формат рядку | Предикат filepos можна використати для знаходження довжини файлу в байтах.


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн