пʼятниця, 4 листопада 2011 р.

ЗАГАЛЬНІ ПРОЦЕДУРИ РОБОТИ З ФАЙЛАМИ


Для роботи з файлами в розділі опису VAR необхідно оголосити файлову змінну:

F:Text; {оголошена файлова змінна F для текстових файлів}

А:File of  Char; {оголошена файлова змінна А для файлів символьного типу}

D:File; {оголошена файлова змінна D для без типізованих файлів}

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


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

Будучи встановленим, зв'язок між файлом і файловою змінною зберігається до наступного виклику процедури ASSIGN. Це означає, що одну файлову змінну можна використовувати для роботи з різними файлами, але ця змінна працює тільки з одним файлом, з яким на даний момент був встановлений зв'язок. Операцію зв’язування можна застосовувати як до існуючих файлів, так і до неіснуючих для подальшого їх створіння.

Процедура ASSIGN має наступний вигляд: ASSIGN(<файлова змінна>, <фізичний файл>);

На місці <фізичний файл> повинно стояти ім'я файлу або його розширене ім'я (з вказівкою шляху доступу до нього). Ім’я файлу заключається в одинарні лапки.

Приклади:

1) Assign(F,‘Dokument.TXT’); {Встановлюється зв'язок файлової змінної F з  фізичним файлом ‘Dokument.TXT’ в поточному каталозі}

 2) Assign(S,‘С:\Dok.TXT’); {Встановлюється зв'язок із змінною S і файлом Dok.TXT на диску С:}

 3) Assign(А,‘А:\Katalog\Name\ Priklad.DOC’); {Встановлюється зв'язок змінної А з файлом Priklad.DOC в підкаталозі Name каталогу Кatalog на диску А:}

 4) Assign( X, ‘PRN’ ); {Встановлюється зв'язок змінної Х з файлом-пристроєм друку}

 5) Assign( У, ‘NUL’ ); {Встановлюється зв'язок змінної У з файлом-пристроєм NUL}

 Більшість дій з файлами можна проводити тільки з відкритими файлами.

Для відкриття файлу передбачені дві процедури: RESET і REWRITE. Після відкриття файлу до нього можна записувати дані або зчитувати дані. Запам'ятаємо, що операції введення-виведення для файлів здійснюються тільки для відкритих файлів. Процедура RESET відкриває файл для зчитування даних із файлу, а процедура REWRITE відкриває файл для запису даних у файл. Не можна записати дані у файл відкритий для читання і навпаки. Відкривати файл для читання можна кілька разів, при цьому перед повторним відкриттям він автоматично закривається, а поточний покажчик файлу встановлюватиметься на його початок. Але слід зауважити, що при повторному відкритті файлу для запису всі дані у файлі будуть стерті. Річ у тому, що при відкритті файлу для запису, файл очищується (стає порожнім).

Процедури RESET і REWRITE мають наступний вигляд:

RESET(<файлова змінна>); REWRITE(<файлова змінна>);             

Приклади:

1) Reset(F); {Файл F відкритий для читання}

2) Rewrite(F); { Файл F відкритий (але вже порожній) для запису }

3) Reset(F); { Файл F знову відкритий для читання}

4) Rewrite(F); { Файл F ( знову порожній) відкритий для запису }

5) Rewrite(F); { Файл F (знову порожній) відкритий для запису}

 Деякі операції з файлами можливі тільки із закритими файлами. Для закриття файлу застосовується процедура CLOSE. Вона має вигляд: CLOSE (<файлова змінна> );

Приклади:

1) Close (F); { Файл F закритий}

2) Close (D); { Файл D закритий}

Запам’ятаємо, що процедура закриття застосовується тільки до відкритих файлів, як для читання так і для запису. Спроба закрити вже закритий (або ще не відкритий) файл приведе до збою програми. Процедура Close не змінює зв'язок між файловою змінною і фізичним файлом, але призначає йому поточний стан “закритий”. Це особливо важливо для файлів відкритих для запису, оскільки фатальна помилка в програмі (не обов'язково пов'язана з операцією закриття файлу) не зможе вплинути на вміст закритого файлу. Але якщо програма перервалася до закриття файлу, то файл буде створений, але вміст останнього буфера не буде перенесений до нього. А при помилці закриття файлу можна втратити весь файл. Процедуру Close необхідно використовувати при завершенні роботи з файлами. Взагалі потрібно пам’ятати, що процедури Reset/Rewrite повинні бути в парі з Close.

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

Процедура  зміни імені має вигляд: RENAME(<файлова змінна>, <друге ім'я фізичного файлу>);

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

Приклад:

Assign(F,‘D:\Katalog\Name.TXT’); {Встановлено зв'язок між файловою змінною F і файлом Name.TXT в каталозі Katalog на диску D:}

 Rename(F,‘D:\Katalog\NewName.TXT‘); {Перейменовується файл з ім'ям Name.TXT пов'язаний із змінною F на нове ім'я NewName.TXT. Тепер змінна F буде зв'язана з файлом D:\Katalog\NewName,TXT.}

Для видалення (знищення, стирання) фізичних файлів на диску застосовується операція ERASE. Ця операція застосовується тільки до закритих файлів. Перед видаленням, файлова змінна повинна бути пов'язана з існуючим файлом. Процедура ERASE має вигляд: ERASE (<файлова змінна>);

Приклад:

Assign(F,‘С:\FileName‘); {Встановлюється зв'язок змінної F з файлом FileName}

ERASE(F); {Віддаляється файл, пов'язаний із змінною F}

При роботі з файлами часто необхідно визначати: досягнутий кінець файлу чи ні. Для цього використовується логічна функція EOF( <файлова змінна>).

Вона приймає значення True, якщо досягнутий кінець файлу (наприклад зчитано останній елемент із файлу і далі даних немає) або у разі коли файл порожній. У будь-яких інших випадках значення функції EOF приймає значення False. Функція застосовується для відкритих файлів.

Немає коментарів:

Дописати коментар