бінарні файли

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

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

Змінні структурованих типів даних (крім строкового) неможливо вважати з текстового файлу. Наприклад, якщо потрібно ввести з текстового файлу дані для наповнення записи toy інформацією про наявні в продажу іграшках (назва товару, ціна товару і віковий діапазон, для якого іграшка призначена):

type toy = record name: string [20]; price: real;

то доведеться написати наступний код:

c: char; i, j, min, max: integer;

a: array [1..100] of toy;

begin assign (f, input); reset (f);

for i: = 1 to 100 do if not eof (f)

then with a [i] do

begin readln (f, name, price, min, max); age: = [];

for j: = min to max do age: = age + [j];

Як бачимо, таке поелементне зчитування дуже незручно і занадто багато роботи.

Вихід з цієї ситуації пропонують типізовані файли - їх елементи можуть ставитися до будь-якого базового або структурованого типу даних. Єдине обмеження: всі елементи повинні бути одного і того ж типу. Це удаване незручність є

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

У розділі var файлові змінні, призначені для роботи з типізований файлами. описуються наступним чином:

var <файловая_перем>: File of <тип_элементов_файла>;

Ніяка файлова змінна не може бути задана константою.

Призначення типизированного файлу

З цього моменту і до кінця розділу під словом "файл" ми будемо мати на увазі "бінарний типізований файл" (зрозуміло, якщо спеціально не обумовлено інше).

Команда assign (f, '<имя_файла>'); служить для встановлення зв'язку між файлової змінної f і ім'ям того файлу, за роботу з яким ця змінна буде відповідати.

рядок ' <имя_файла> 'Може містити повний шлях до файлу. Якщо шлях не вказано, файл вважається розташованим в тій же директорії, що і виконуваний модуль програми.

Відкриття та закриття типизированного файлу

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

reset (f); - відкриття файлу для зчитування з нього інформації і одночасно для запису в нього (якщо такого файлу не існує, спроба відкриття викличе помилку). Ця ж команда служить для повернення покажчика на початок файлу;

rewrite (f); - відкриття файлу для запису в нього інформації; якщо такого файлу не існує, він буде створений; якщо файл з таким ім'ям вже є, вся інформація, яка містилася в ньому раніше інформація зникне.

Закриваються типізовані файли процедурою close (f). загальної для всіх типів файлів.

Зчитування з типізований файлу

Читання з файлу, відкритого для зчитування, проводиться за допомогою команди read (). У дужках спочатку вказується ім'я файлової змінної, а потім - список введення 1):

type toy = record name: string [20]; price: real;

var f: file of toy;

a: array [1..100] of toy; begin

for i: = 1 to 100 do

if not eof (f) then read (f, a [i]); close (f);

Пошук в типизированном файлі

Уже знайома нам функція eof (f: file): boolean повідомляє про досягнутому кінці файлу. Всі інші функції "пошуку кінця" (eoln (). Seekeof () і seekeoln ()), властиві текстових файлів, не можна застосовувати до файлів типізованим.

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

1. Функція filepos (f: file): longint повідомить поточне положення вказівника у файлі f. Якщо він вказує на самий кінець файлу, що містить N елементів, то ця функція видасть результат N. Це легко пояснити: елементи файлу нумеруються починаючи з нуля, тому останній елемент має номер N-1. А номер N належить, таким чином, "неіснуючого" елементу - ознакою кінця файлу.

2. Функція filesize (f: file): longint вирахує довжину файлу f.

3. Процедура seek (f: file, n: longint) пересуне покажчик в файлі f на початок запису з номером N. Якщо виявиться, що n більше фактичної довжини файлу, то покажчик перенесуть і за реальний кінець файлу.

4. Процедура truncate (f: file) обріже "хвіст" файлу f. всі елементи починаючи з поточного та до кінця файлу будуть з нього вилучені. Насправді ж станеться лише переписування ознаки "кінець файлу" в те місце, куди вказував покажчик, а фізично "відрізані" значення залишаться на колишніх місцях - просто вони стануть "безгоспними".

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

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

write (f, a, b, c); - записати в файл f (попередньо відкритий для запису командами rewrite (f) або reset (f)) змінні a. b. c.

Виводити в типізований файл можна тільки змінні відповідного опису типу даних. Неіменовані і нетипізовані константи не можна виводити в

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

Наприклад, якщо потрібно замістити п'ятий елемент файлу значенням, що зберігається в змінної а. то слід написати наступний уривок програми:

Схожі статті