Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чернов Шафеева.doc
Скачиваний:
47
Добавлен:
21.05.2015
Размер:
1.39 Mб
Скачать

2.11.2. Типизированные файлы

Типизированные файлы позволяют организовать прямой доступ к каж­дой из компонента (по его порядковому номеру), поскольку длина любого компонента типизированного файла строго постоянна. Описание файловой переменной для таких файлов выполняется в следующем виде

Var <ф.п.>: file of <тип компонент>;

Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на компоненту с номером нуль. После каждого чтения или записи указатель сдвигается с следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.

Для работы с типизированными файлами определены следующие проце­дуры и функции (табл.9). Процедура SEEK и функции FILESIZE, FILEPOS нельзя использовать для текстовых файлов.

Чтобы переместить указатель в конец файла, можно написать, напри­мер: Seek(f,FileSize(f)); где f  файловая переменная.

Файловая переменная предварительно должна быть объявлена предло­жением FILE OF и связана с именем физического файла процедурой ASSIGN. Файл перед обращением к нему должен быть открыт.

Таблица 9

Процедуры и функции для работы с типизированными файлами

Процедуры, функции

Выполняемые действия

READ(<ф.п.>, <список ввода>);

WRITE(<ф.п.>,

<список вывода>);

SEEK(<ф.п.>, <номер_компоненты>)

FILESIZE(<ф.п.>):

LongInt;

FILEPOS(<ф.п.>);

Процедура обеспечивает чтение очередных ком­понентов файла

Процедура используется для записи новых ком­понентов в файл; в качестве элементов вывод может быть выражение

Процедура смещает указатель файла к компо­ненту с указанным номером; <номер_компоненты> - выражение типа LONGINT

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

Функция возвращает порядковый номер компо­ненты файла, доступной для чтения или записи

2.11.3. Нетипизированные файлы

Нетипизированные файлы обьявляются без указания типа ключевым словом FILE:

TYPE <имя_типа>=FILE;

а переменные для нетипизированных файлов описываются в виде:

VAR <ф.п.>: FILE;

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

При инициализации нетипизированных файлов процедурами RESET и REWRITE указывается длина записи нетипизированного файла в байтах. Например, так

VAR f: file; ...

ASSIGN (f, 'a.dat');

RESET (f, 512); ......

Длина записи указывается вторым параметром и может быть представ­лена выражением типа WORD. Если параметр длины опущен, подразумевается длина 128 байт (максимальная длина 65 535 байтов).

Для обеспечения максимальной скорости обмена данными следует за­давать длину, кратную длине физического сектора дискового носителя (512 байт). Более того, фактически пространство на диске выделяется любому файлу порциями  кластерами, которые в зависимости от типа дис­ка могут занимать два и более смежных секторов. Как правило, кластер может быть прочитан или записан за один оборот диска, поэтому наивыс­шую скорость обмена данными можно получить, если указать длину записи, равную длине кластера.

При работе с нетипизированными файлами применяются все рассмот­ренные процедуры и функции, доступные типизированным файлам, за исклю­чением READ и WRITE, которые для чтения и записи заменяются соответственно высокоскоростными процедурами BlockREAD и BlockWRITE:

BlockREAD(<ф.п.>,<буфер>,<N>,[,Var<NN>])

BlockWRITE(<ф.п.>,<буфер>,<N>,[,Var<NN>])

где <буфер>  имя переменной, которая будет участвовать в обмене дан­ными с дисками; <N>  количество записей, которые должны быть прочита­ны или записаны за одно обращение к диску; <NN>  необязательный пара­метр, содержащий при выходе из процедуры количество фактически обрабо­танных записей.

За одно обращение к процедурам может быть передано N*r байт, где r  длина записи нетипизированного файла. Передача идет начиная с первого байта переменной <буфер>.

После завершения процедуры указатель смещается на <NN> записей. Процедурами SEEK, FilePos и FileSize можно обеспечить доступ к любой записи нетипизированного файла.