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

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

Нетипизированный файл рассматривается в Pascal как совокупность символов или байтов. Представление Char или Byte не играет никакой роли, а важно лишь с точки зрения объема памяти, занимаемого данными. Такое представление стирает все различия между файлами независимо от типа их объявления. На практике это приводит к тому, что любой файл, подготовленный как текстовый или типизированный, можно открыть и начать работу с ним, как с нетипизированным набором данных. Для определения в программе нетипизированного файла служит зарезервированное слово File:

var UntypedFile : File;

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

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

Rewrite(UntypedFile, 1);

или

Reset(UntypedFile, 1);

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

Особенность аппаратной поддержки заключается в том, что при обращении к внешнему устройству минимально возможным объемом данных для считывания являются 128 байт. В стремлении добиться наибольшей эффективности файловых операций в Turbo Pascal принято, соглашение, по которому длина записи нетипизированного файла по умолчанию составляет 128 байт. Поэтому после открытия файла с помощью вызовов

Rewrite(UntypedFile);

или

Reset(UntypedFile);

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

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

BlockReadCvar F : file ;

var Buf;

Count : word {;Result:word};

Эта процедура считывает из файла F определенное число блоков в память, начиная с первого байта переменной Buf. Параметр Buf представляет любую переменную, используемую для накопления информации из файла F. Параметр Count задает число считываемых блоков. Параметр Result является необязательным, после вызова процедуры возвращается число считанных записей.

Использование параметра Result подсказывает, что число считанных блоков может быть меньше, чем задано параметром Count. Если Result указан при вызове, то ошибки ввода-вывода в такой ситуации не произойдет. Для отслеживания этой и других ошибок чтения можно использовать опции {$1-}, {$1+} и функцию IOresult

BlockWrite(var F : file ; var Buf; Count:word {;Result;word});

Эта процедура предназначена для быстрой передачи в файл F определенного числа записей из переменной Buf. Все параметры процедуры BlockWrite аналогичны соответствующим параметрам процедуры BlockRead. Обе процедуры выполняют операции ввода-вывода блоками. Объем блока в байтах определяется по формуле:

Объем = Count * RecSize,

где RecSize – размер записи файла, заданный при его открытии. Суммарный объем разового обмена не должен превышать 64 Кбайт. Помимо скорости передачи данных, преимущество использования этих процедур заключается в предоставлении программисту возможности самостоятельно определять размер буфера для файловых операций.

Эта возможность играет значительную роль в тех задачах, где необходимо жесткое планирование ресурсов.

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