Формат DBF

Файл делится на три части: заголовок, описание структуры записей (множество дескрипторов) и тело (собственно записи). Заголовок файла имеет фиксированную длину, а следующий непосредственно за ним список дескрипторов – переменное число дескрипторов (рис.1).

Рис.1. Структура DBF-файла

Далее в файле содержатся записи фиксированной длины, информация в которых представлена в коде ASCII. Каждая запись содержит заголовочный байт – символ пробела (десятичный код ASCII – 32), за исключением заголовочных байтов удаленных записей. Удаленные записи помечаются звездочкой (*).

Заголовок файла DBF всех версий, начиная с dBASE III, имеет постоянную длину 32 байта (рис.2).

Рис. 2 Структура заголовка файла DBF

Нулевой байт заголовка имеет структуру битовой карты (рис. 3) и содержит номер версии и некоторую служебную информацию.

Рис. 3. Структура нулевого заголовочного байта

Следующие три байта содержат шестнадцатеричную дату последнего обновления в формате ГГММДД. После даты расположен счетчик записей (включая удаленные) в виде длинного целого числа без знака (четыре байта). Следующие два байта описывают в виде обычного целого числа без знака совокупную длину заголовка и списка дескрипторов полей. Следующее число без знака определяет длину записей файла. Далее идут два зарезервированных байта и байт, имеющий значение 0-1, определяющий задержку по транзакции (только для dBASE IV). Байты с 15 по 27 зарезервированы. Байт 28 используется только в dBASE и указывает, подключен ли к файлу множественный индекс – файл MDX. И, наконец, байты с 29 по 31 также зарезервированы.

Сразу за заголовком следуют дескрипторы полей. Как и заголовок, в версиях выше dBASE 2 каждый дескриптор имеет постоянную длину – 32 байта (рис. 4).

Рис. 4. Структура дескриптора файла DBF

Максимальное число дескрипторов на один файл – 255. (В CLIPPER – 512).

Первые одиннадцать байт каждого дескриптора содержат имя поля, неиспользованные символа заполняются нулями. В двенадцатом байте указан тип поля (C, L, N, M или F). Следующие четыре байта заполнены нулями и зарезервированы. 16-й байт описывает длину поля (включая десятичные разряды и десятичную точку), тогда как 17-й байт содержит только количество десятичных разрядов. Следующие тринадцать байтов зарезервированы. Последний байт дескриптора является флагом тэга многоиндексного файла MDX в dBASE 4, имеет значение 0, если тэга нет, и 1, если он есть. Поле дескрипторов отделяется от записей файла терминальным символом перевода строки (код ASCII – 10).

Таким образом, вся информация, необходимая для работы с записями (их количество, длина, структура и т.п.) хранится в файле вместе с данными и делает данные независимыми от программ обработки: с данными будет работать любая СУБД, использующая формат DBF.