Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
21-60.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
270 Кб
Скачать
☆

22)Типи файлів і оголошення файлових змінних

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

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

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

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

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

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

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

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

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

Приклади оголошення файлових змінних наведено нижче.

УВАГА

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

9.2.2. Установка відповідності між фізичним і логічним файлами

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

Аssіgn(<файлова змінна>;<рядковий вираз>);

Значенням рядкового виразу має бути ім'я фізичного файла. Формат цього імені визначається операційною системою. Нагадаємо, що повне ім'я файла в операційних системах MS-DOS та Windows має такий вигляд:

<ім'я логічного диска>:\<ім'я каталогу 1>\<ім'я каталогу 2>\...\ <ім'я файла>.<розширення>

Файл має знаходитися в робочому каталозі програми, якщо в його імені не вказано шлях до нього. Якщо ім'я файла задається порожнім рядком, то файлова змінна зв'язується зі стандартними файлами і nput та output, про які йтиметься нижче.

Виклик процедури Assign має передувати викликам усіх інших процедур обробки файлів. У прикладі 9.2 виконано зв'язування файлових змінних із фізичними файлами.

9.2.3. Відкриття та закриття файлів

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

  • Файл відкритий для читання: читання даних із файла дозволено, а запис до файла — заборонено.

  • Файл відкритий для запису: дозволений лише запис даних до файла.

  • Файл відкритий для читання і запису: дозволено як читання, так і запис до файла. У цьому стані не можуть перебувати текстові файли.

  • Файл закритий: із файлом не можна виконувати жодних дій.

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

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

Reset(<файлова змінна>); Reset(var <файлова змінна> : File; <розмір запису> : Word);

Перший варіант процедури використовується для текстових і типізованих файлів, другий — для нетипізованих. Текстові файли процедура Reset відкриває лише для читання, а бінарні файли — для читання і запису.

Параметр <розмір запису> використовується під час обміну даними з нети-пізованим файлом. Розмір запису нетипізованого файла впливає на швидкість обміну даними між диском і пам'яттю. Найбільшу швидкість можна забезпечити, якщо задати розмір запису рівним розміру кластера. Нагадаємо, що кластер складається з фіксованого числа секторів дискового носія. Кластер може бути прочитаний або записаний протягом одного звернення до диска.

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

В результаті спроби відкрити файл, якого немає на диску, виникне помилка Error #2: File not found (Файл не знайдено). Щоб запобігти перериванню програми внаслідок спроби відкрити неіснуючий файл, використовують директиву компілятора {$I-}. Вона вимикає автоматичний контроль помилок введення та виведення. Директиву {$I+} використовують для ввімкнення такого контролю. Якщо контроль помилок введення-виведення вимкнено, то для перевірки наявності файла на диску можна використовувати функцію IOResult. Коли файл існує на диску, функція IOResult повертає значення 0. Приклад 9.3 показує, як використовуються директиви компілятора {$I-}, {$I+} і функція IOResult під час відкриття файла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]