БИБЛИОТЕКА ПРОГРАММИСТА

СТРУКТУРА DBF-ФАЙЛА

БАРНАУЛ 1991

СТРУКТУРА ФАЙЛА DBF

   Файлы DBF имеют стандартную структуру во всех типах программного обеспечения микрокомпьютеров. Подавляющее большинство электронных таблиц, СУБД и интегрированных пакетов имеют средства экспорта и импорта этих файлов. На то есть две причины, первая из которых - популярность пакета dBASE, а вторая - простота организации этих файлов. Заголовок файла имеет фиксированную длину, а список дескрипторов, следующий непосредственно за ним, - переменное число дескрипторов (см. табл. 1).

ДлинаНазначение
32Заголовок файла DBF
n*32Дескрипторы полей (количеством n)
1Терминальный байт (ASCII - 10, ПС, LF)
m*kЗаписи с данными (длиной k и количеством m)

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

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

АдресДлинаНазначение
0001Битовая карта идентификатора
1013Дата последней модификации в виде ГГММДД
4044Число записей в базе
8082Полная длина заголовка (с дескрипторами)
100A2Длина одной записи
120C2Зарезервировано (всегда 0)
140E1Флаг задержки транзакции (только dBASE IV)
150F13Зарезервировано (всегда 0)
281E1Флаг множественного индекса MDX
291F3Зарезервировано (всегда 0)

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

БитДлинаНазначение
03Номер версии файла DBF
31Флаг DBT (только в dBASE IV)
41Зарезервировано (всегда 0)
52Флаг SQL (только в dBASE IV)
71Флаг DBT (все версии dBASE)

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

    Сразу за заголовком следуют дескрипторы полей. Как и заголовок, в версиях выше dBASE II каждый дескриптор имеет постоянную длину 32 байта (табл. 4). Максимальное число дескрипторов на один файл - 255. В Clipper это число достигает 512.

АдресДлинаНазначение
00011Имя поля
110B1Тип поля (C, L, N, M или F)
120C4Смещение от начала записи до данных поля
16101Полная длина поля
17111Число десятичных разрядов
301E13Зарезервировано (всегда 0)
311F1Флаг тэга файла MDX (только в dBASE IV)

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

    Поле дескрипторов отделяется от записей файла терминальным символом - символом перевода строки (код ASCII - 10).

    В табл. 5 приведена обобщенная структура записей с данными.

ДлинаНазначение
1Заголовочный байт
nДанные записи (количество данных n)

Замечание:
-----------------
Заголовочный байт может принимать одно из следующих значений:
  20h (32) - Обычная запись
  2Ah (42) - Запись помеченная для удаленная
  1Ah (26) - Предыдущая запись была последней