типізовані файли

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

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

type Fb = file of byte;


type Fc = file of char

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

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

Читання з типізованих файлів виконується лише процедурою read, а запис - лише процедурою write.

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

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

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

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

Процедура write для типізованих файлів має формат

write (файловая_сменная, спісок_вивод);

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

Для роботи в файлах з прямим доступом розроблені наступні процедури і функції (нехай змінне k описано як longint):

Функція FilePos повертає номер позиції вказівника у файлі (позиції нумерують з нуля!). Результат функції longint. Синтаксис покажчика функції:

Var f: file of byte;

Якщо файловий покажчик вказує на четвертий елемент, то оператор

поверне значення k = 3. Так як номер елемента четвертий. а позиція третя.

Функція filesize повертає розмір файлу (число елементів при рахунку від одиниці!). Результат функції longint. Синтаксис покажчика функції функції:

Для попереднього прикладу оператор

поверне значення k = 6, так як кількість компонент вважається починаючи з одиниці.

Процедура seek переміщує покажчик поточної позиції у файлі на позицію з заданим номером (при рахунку від нуля!)

Якщо для попереднього прикладу використовувати оператор

Файловий покажчик буде встановлений на позицію 2, а компонент файлу номер 3

видаляє всі компоненти файлу від поточного компонента до кінця файлу.

Після закінчення роботи з типізованим файлом його треба закрити (процедура close).

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

Приклад 3. Створити файл з цілих чисел. Введення даних здійснювати поки не буде натиснутий символ 'Y'.

var f: file of integer;

writeln ( 'Enter name of file');

// Введення імені файлу