типізовані файли
Типізований файл розглядається як упорядкована послідовність елементів одного типу.
Типізовані файли мають сувору внутрішню структуру. Під час запису в нього записується машинне подання компоненту (бінарний код), будь то число, символ, масив. Його структура лінійна: запис слід за записом, і компоненти нічим не відрізняються один від іншого. Число компонент файлу може змінюватися, тобто заздалегідь не фіксується, як число елементів масиву. Додаються записи лише в кінець, а заміщуються - будь-які існуючі в файлі записи.
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');
// Введення імені файлу