Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Файл – це пойменована область пам'яті на зовнішньому носії, призначена для збереження даних.

Робота з файлом у мові Pascal складається з таких етапів: оголошення файлової змінної; зв'язування файлової змінної з іменем наявного файла або файла, що створюється; відкриття файла; обробка файла; закриття файла.

Файли класифікують за типом компонентів і за методом доступу до них. За типом компонентів розрізняють текстові та бінарні (двійкові) файли, а за методом доступу — файли послідовного і прямого доступу. Текстові файли призначені для збереження текстів (наприклад, текстів Pascal-програм), а бінарні файли використовуються для збереження даних різних типів.

Текстовий файл є сукупністю символьних рядків змінної довжини. Кожен рядок завершується маркером кінця рядка — спеціальною парою керуючих символів: #13 (повернення каретки) та #10 (переведення рядка). Наприкінці файла записується маркер кінця файла — керуючий символ #26 (рис. 23.1).

Рисунок 23.1. Текстовий файл, що є сукупністю рядків

Бінарні файли в мові Pascal поділяються на типізовані та нетитзовані. Типізований файл складається з компонентів одного типу. Кожний компонент має порядковий номер, номер першого компонента дорівнює нулю. Інформація в типізованих файлах зображується в тому самому вигляді, що і в пам'яті комп'ютера, і тому відпадає потреба у використанні керуючих символів типу кінця рядка або повернення каретки. Приклад зображення даних у файлі, що містить компоненти рядкового типу, наведено на рис. 23.2.

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

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

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

Синтаксис оголошення файлової змінної залежить від типу файла. Далі наведено синтаксис оголошення змінної текстового, типізованого та нетипізованого файла.

var <ім'я файлової змінної>: text;

var <ім'я файлової змінної>: file of <тип компонентів>;

var <ім'я файлової змінної>: file;

Для опису файлу використовуються службові слова File та Of, за яких випливає базовий тип елементів. Базовий тип може бути будь-як типом.

Файли повинні бути описані в програмі або явно в розділі Var, або з використанням розділу Type.

Оголошення файлів у розділі Var має вигляд:

Var ім'я файлової змінної : file of базовий тип;

наприклад,

Var

F1 : file of char; {файл символьних даних}

F2 : file of integer; {файл цілих даних}

F3 : file of real; {файл дійсних даних}

Оголошення в розділі Type має вигляд:

type ім'я типу = file of базовий тип;

var ім'я файлової змінної : ім'я типу;

Операції обробки файлів можна розділити на настановні та завершальні, і операції введення-виведення.

Настановні та завершальні операції реалізовані у вигляді процедур:

Assign; Reset; Rewrite; Close.

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

Assign (файлова змінна, 'повне ім'я зовнішнього файлу');

Наприклад, після виконання

begin

assign (f1,’c: \ tp \ pasfiles \ d1.pas’);

файлова змінна F1 буде зв'язана з дисковим файлом D1.pas, розташованим на диску С: у підкаталозі PASFILES каталогу ТР.

Після установки зв'язку між файловою змінною і зовнішнім файлом процедурою Assign у програмі повинна іти процедури Reset чи Rewrite, які мають один параметр – файлову змінну:

Reset (файлова змінна);

чи

Rewrite (файлова змінна);

Ці процедури призначені для відкриття зовнішніх файлів. Наприклад, після виконання

begin

assign (f1,’c:\tp\pasfiles\d1.pas’);

reset(f1);

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

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

Процедура

Close (файлова змінна);

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

Операції введення-виведення. Читання даних з файлу виконується за допомогою процедури Read. Загальний вид процедури:

Read(файлова змінна, змінні);

тут ім'я файлової змінної, відкритої процедурою Reset чи Rewrite, за якою слідують змінні, в які будуть міститися значення, що зчитуються з зовнішнього файлу. Тип цих змінних повинен збігатися з базовим типом файлу, з яким зв'язана файлова змінна. Наприклад,

begin

assign (f1,’c: \ tp \ pasfil es \ d1.pas’)

reset(f1);

read(f1,s);

після виконання процедури Read (f1,s), починаючи з поточної позиції покажчика файлу буде послідовно зчитуватися значення, що містяться в зовнішньому файлі d1.pas. Кожне прочитане значення буде привласнюватися перемінній S, а покажчик файлу буде зміщатися на наступну позицію.

Запис даних у файл виконується за допомогою процедури Write. Загальний вигляд процедури:

Write(файловий змінна, список виражень);

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

Крім процедур і функцій, розглянутих раніше, у мові Pascal визначено процедури, за допомогою яких можна видалити файл або перейменувати його, тобто виконати операції, властиві операційній системі. Для видалення файла використовують процедуру Erase, а для перейменування — процедуру Rename. Синтаксис зазначених процедур є таким:

Еrаsе(<файлова змінна>);

Rеnаmе(<файлова змінна>,<нове ім'я>);

Тут <нове ім' я> — рядок, який має задовольняти вимоги операційної системи щодо специфікації імен файлів. Під час виклику процедур Erase та Rename файл має бути закритим.

Нагадаємо, що в мові Pascal визначено два різновиди бінарних файлів: типізовані і нетипізовані файли. Типізований файл є послідовністю однотипних компонентів. Нетипізований файл можна відкрити лише як файл компонентів однакового розміру, тобто як файл однотипних компонентів. Компоненти бінарного файла нумеруються, але їх кількість не є наперед відомою, як у масивах. Між компонентами не записуються жодні роздільники. Такого поняття, як рядок, а отже, і маркер кінця рядка, для бінарних файлів не означено.

Зчитування з бінарних файлів здійснюється лише процедурою Read, а запис -лише процедурою Write. Застосування до бінарних файлів процедур Readln або Writeln є неприпустимим, оскільки для таких файлів не означено поняття рядка.

Питання для контролю.

  1. Поняття файлу в Pascal-і.

  2. З яких етапів складається робота з файлом у мові Pascal?

  3. Типи файлів за методом доступу.

  4. Класифікація файлів за типом компонентів.

  5. Настановні та завершальні операції.

  6. Операції введення-виведення.

  7. Процедури видалення та перейменування файлів.