На відміну від масиву довжина файлу не задається, а місце елемента не визначається індексом. Файл, структурно організований як послідовність елементів, де кожен елемент стає доступним після перебору всіх попередніх елементів, називається послідовним. Файл, збережений на диску, називається зовнішнім чи вхідним файлом. У Pascal-програмі представником файлу є змінна файлового типу, що інтерпретує файл як нескінченний список значень того самого базового типу. Зі змінною файлового типу пов’язане поняття поточного покажчика файлу. Поточний покажчик – це схована змінна, тобто вона неявно описана разом з файловою змінною, і вказує на деякий конкретний елемент файлу. Графічна інтерпретація файлу, пов'язаного з файловою перемінною має вигляд зображений на рис.24.1:
Поточний покажчик
Рисунок 24.1. Графічна інтерпретація файлу
Читання з файлу чи запису у файл виконується поелементно, причому записується чи зчитується той елемент файлу, що позначений поточним покажчиком. При цьому покажчик переміщується, указуючи той чи інший елемент. Всі елементи файлу пронумеровані; перший елемент має нульовий номер.
Компоненти бінарного файлу мають однаковий розмір. Цим зумовлені певні переваги бінарного файлу над текстовим. По-перше, стає можливим прямий доступ до компонентів файлу за їхніми номерами. Під прямим доступом розуміється можливість встановлювати файловий покажчик на заданий компонент без послідовного перебирання попередніх компонентів. По-друге, відкриття бінарного файлу процедурою Reset робить можливим як читання, так і запис довільних компонентів файлу без руйнації його вмісту. Це пояснюється тим, що модифікація кількох компонентів усередині бінарного файлу не призведе до зміни їх розміру, а отже, не потребуватиме зсуву інших компонентів. Нагадаємо, що процедура Rewrite також відкриває бінарний файл у режимі читання і запису, але при цьому вона знищує його вміст (якщо файл уже існував).
Прямий доступ до компонентів бінарного файлу в мові Pascal здійснюється за допомогою процедур та функцій, наведених у табл. 24.1.
Таблиця 24.1. Процедури та функції прямого доступу до компонентів файлів
Ім'я функції або процедури
| Призначення
|
Seek(var f; n: Longint);
| Переміщує файловий покажчик на компонент з номером n. Файл f має бути відкритий
|
Truncate(var f);
| Видаляє всі компоненти файла f від поточного компонента до кінця файла
|
FilePos(var f): Longint;
| Повертає номер запису, на який посилається файловий покажчик
|
FileSize(var f): Longint;
| Повертає кількість компонентів файла f
|
Треба взяти до уваги, що процедури Seek, Truncate і функція FilePos не працюють з текстовими файлами.
Приклад 1
Обчислити кількість компонентів в файлі дійсних чисел, вивести вміст файлу на екран.