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

К типизированным файлам относятся файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных. Стандартное задание в программе такой файловой переменной осуществляется следующим образом:

type
FileRec = record
end;

var F : file of FileRec;

Если содержимое текстовых файлов рассматривается как набор символов, подготовленный специальным образом с учетом общепринятых соглашений о представлении текстовой информации, то содержимое типизированных файлов рассматривается как последовательность записей определенной структуры. Единицей измерения такого набора данных является сама запись. Длина записи определяется как SizeOf(FileRec).

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

Seek(var F; NumRec: Longlnt)
Эта процедура устанавливает текущую файловую переменную F на запись с номером NumRec; F – файловая переменная для типизированных и нетипизированных наборов данных. При открытии типизированного файла текущая позиция для работы с ним установлена на начало первой записи, которая по принятым соглашениям имеет номер 0, т. е. номер физической записи на единицу меньше номера логической записи. Это небольшое несоответствие в номерах может служить причиной возникновения ошибок чтения-записи, что в результате может привести к нарушению целостности важной информации. Положение усугубляется тем, что неверное позиционирование на запись с помощью процедуры Seek, как правило, не приводит к каким-либо видимым ошибкам ввода-вывода, на которые всегда можно отреагировать. Исключение составляют ситуации, когда нет доступа к файлу, файл не был открыт или назначено позиционирование на несуществующую запись. Такие ситуации обрабатываются с помощью функции IOresult.
Типизированные файлы позволяют организовать работу в режиме чтения-записи. Эта возможность играет решающую роль при определении, каким типам файлов отдать предпочтение для большинства прикладных задач. Информация в типизированных наборах данных представлена в том же виде, как ив памяти компьютера во время выполнения программы, поэтому не требуется отслеживать управляющие последовательности типа конец строки или возврат каретки.

Для работы с файлами прямого доступа дополнительно можно использовать следующие средства:

Truncate(var F)

Эта процедура уничтожает все компоненты файла F, начиная с места текущего положения файлового указателя.

FilePos(var F) : Longlnt

Эта функция возвращает для файла F текущую файловую позицию (номер записи, на которую она установлена) в виде значения типа Longlnt.

FileSize(var F) : Longlnt

Эта функция возвращает размер файла (количество записей) в виде значения типа Longlnt.

Для пустого файла вызов FileSize возвращает значение 0. Обнаружение ошибок при обращении к внешним носителям для обеих функций производится через IOresult.

Для того чтобы очередная запись могла быть записана в конец типизированного файла, необходимо переместить текущую файловую позицию в конец файла. Когда создается новый файл, это происходит автоматически после формирования каждой очередной записи. Если файл уже создан и файловая позиция, установленная при помощи Seek, находится где-нибудь в начале файла (FilePos(F) < FileSize(F)), то в конец файла ее позволяет переместить вызов Seek(F, FileSize(F));

В каждом файле число логических и физических записей совпадает, а при позиционировании номер физической записи на единицу меньше номера логической записи.

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

Добавить комментарий