Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
4
Добавлен:
08.09.2019
Размер:
2 Мб
Скачать
☆

Файлові типи Організація файлів

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

Однак є багато задач, коли кількість компонентів певного типу (будь-якого з відомих уже нам) наперед визначити немож­ливо, то її визначають у процесі виконання програми. Для роботи з такими даними в мові Паскаль передбачено файловий тип, що є послідовністю компонентів конкретного типу і не-визначеної наперед довжини.

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

Файловий тип - це єдиний засіб зв 'язку програми із зовніш­нім середовищем. Тільки через файли в мові Паскаль можна передавати в програму вхідні дані й одержувати з програми результати.

Робота з файлами

Загальний вигляд опису файлового типу такий:

<Ім'я типу>=file of <Тип_компонентів>;

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

Приклад опису файлового типу такий:

type

vect=array [1..10] of char;

F=file of vect;

Тут F описаний як файл, компонентами якого є масиви десяти символів. Цей же файл можна ввести і в розділі опису змінних:

var

FL: file of vect;

у випадку, коли тип vect визначений. Якщо цей тип не визначе­ний, то

var

FL: file of array [1 ..10] of char;

За допомогою двох останніх описів уводять файлову змінну (коротше - файл) FL, компонентами якої є символьні 10-еле-ментні масиви.

Зазначимо, що Турбо Паскаль допускає використання так званих безтипових файлів, для яких тип компонентів не ви­значений (такі файли описані далі).

Із значеннями файлового типу не можна виконувати жод­них арифметичних чи логічних операцій, навіть присвоєння чи порівняння (на відміну від змінних комбінованого типу, з якими виконують операції присвоєння значень змінних одного і того ж комбінованого типу).

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

Підготовчі та завершальні операції

Операції цієї групи виконують за допомогою процедур Assign, Close, Flush, Reset, Rewrite.

a) ASSIGN - призначена для налаштування зв'язку між фі­зичним файлом на магнітному носії і файловою змінною. Звер­тання до процедури таке:

ASSIGN (<ім'я_файлової_змінної>, '<зовнішнє_ім'я_файлу>')

Ім'я фізичного файлу будують за правилами MS-DOS, тоб­то воно може містити ім'я диска, ланцюг каталогів і повне ім'я файлу (з розширенням). Імена поточного диска чи каталогу можна не зазначати. Ім'я фізичного файлу - це рядок символів, тому його беруть у лапки (апострофи). Наприклад:

Assign(f, 'E:\dani\fl.dat')

У результаті виконання цієї процедури файлова змінна f буде пов'язана з дисковим файлом fl.dat у каталозі dani на диску Е.

Другий параметр процедури Assign може містити позна­чення "псевдофайлу", тобто файлу, пов'язаного з конкретним фізичним пристроєм:

'CON' - консоль: у випадку виведення інформація надходить на дисплей, у випадку введення - з клавіатури;

'LPT1', 'LPT2', 'LPT3' - пристрої друкування (може бути одно­часно до трьох);

'PRN' - синонім 'LPT1';

'СОМ1', 'COM2' - послідовні комунікаційні порти, залежить від пристроїв, які приєднані;

'AUX' - синонім 'СОМГ;

'NUL' - фіктивний пристрій, для виведення в "нікуди".

б) Reset і Rewrite призначені для відкривання файлів:

Reset(<iм'я_фaйлoвoї_змiннoї>)

Rewrite(<iм'я_фaйлoвoї_змiннoї>)

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

Для ілюстрації роботи процедур опрацювання файлів ви­користовують поняття вікно файлу (або вказівник файлу). Вік­но визначає позицію доступу, тобто позицію файлу, доступну для читання чи записування. Відкривання файлу передбачає таке:

відшукання файлу на зовнішньому носії;

утворення системних буферів для обміну інформацією;

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

Процедуру Reset використовують для відкривання вже на­явного дискового файлу, інакше виникне помилка. Процедура Rewrite допускає, що файлу ще нема, тоді вона створює цей файл. Якщо ж файл вже є, то Rewrite його очищає (інформація стає недоступною). В обох випадках вікно позиціонується на нульовий елемент.

в) Flush призначена для завершення обміну без закривання файлу:

Flush (<ім'я_файлової_змінної>)

Ця процедура "скидає" з буфера останні елементи в файл під час записування. Close теж виконує цю дію, крім інших.

г) Close завершує дії з файлом:

Close (<ім'я_файлової_змінної>)

У цьому випадку будуть ліквідовані всі внутрішні буфери, утворені під час відкриття файлу. Після цього файлову змінну можна пов'язати з іншим дисковим файлом за допомогою As­sign. Зазначимо, що після завершення роботи програми всі файли автоматично закриваються. Однак для гарантії ліпше використати Close.