22. Тип данных файл. Виды файлов. Работа с типизированными  файлами. Работа в режиме последовательного и прямого доступа.

Файл представляет собой именованную последовательность однотипных элементов, размещенных на внешнем устройстве. Для выполнения операций с конкретным файлом в программе обычно используется так называемая файловая переменная или логический файл. В зависимости от типа элементов различают текстовые, типизированные и нетипизированные файлы.

Текстовый файл можно рассматривать как последовательность символов, разбитую на строки длиной от 0 до 256 символов. Текстовый файл - это файл, компонентами которого являются символьные строки переменной длины, заканчивающиеся специальным маркером конца строки Для описания используется стандартный тип Text:

var

F: text; {F - файловая переменная}

К типизированным файлам относятся файлы строго определенного типа. Чаще всего это файлы, состоящие из записей. Они применяются для создания различных баз данных.Типизированный файл - это файл, все компоненты которого одного типа, заданного при объявлении файловой переменной. Компоненты файла хранятся на диске во внутреннем (двоичном) формате и нумеруются с 0. Если посмотреть такой файл любым текстовым редактором, то можно распознать только символьную информацию, на месте же чисел в файле будут располагаться пробелы или символы псевдографики. Стандартное задание в программе такой файловой переменной осуществляется следующим образом:


type
FileRec = record
end;

var F : file of FileRec;

Нетипизированными называют файлы, объявленные без указания типа его компонентов. Операции чтения и записи с такими файлами осуществляются блоками. Отсутствие типа компонента делает эти файлы совместимыми с любыми другими, а выполнение ввода/вывода блоками позволяет организовать высокоскоростной обмен данными между диском и памятью. Нетипизированные файлы, как и типизированные, допускают организацию прямого доступа. Для определения в программе нетипизированного файла служит зарезервированное слово File:

var UntypedFile : File;

Работа с типизированными файлами.

Для работы с типизированными файлами используют специальные процедуры
и функции.
1. Процедура Read(Var f; с1, с2, ...,сn) - осуществляет чтение очередных компонентов типизированного файла. Список переменных ввода содержит одну или несколько переменных того же типа, что и компоненты файла, разделенных запятыми. Если файл исчерпан, обращение к процедуре вызывает ошибку ввода-вывода.
2. Процедура Write(Var f; c1, с2, ...,cn) - осуществляет запись данных в типизированный файл. Список вывода содержит одно или более выражений того же типа, что и компоненты файла, разделенных запятыми.
3. Процедура Seek(Var f; numcomp:word) - осуществляет установку указателя файла на компонент файла с номером numcomp.
4. Функция FileSize(Var f):longint - возвращает количество компонент файла, указанного файловой переменной. Может использоваться для установки на конец файла совместно с Seek(): Seek(f, FileSize(f));...
5. Функция FilePos(Var f):longint - возвращает порядковый номер компонента,
который будет обрабатываться следующей операцией ввода-вывода.

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

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

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

Удаление компонент обычно требует перезаписи файла.

Работа в режиме последовательного и прямого доступа.

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

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

Hosted by uCoz