статьиGNU Free Documentation License материалы взяты из Википедии Статья была изменена. Оригинал статьи.

DBF

Материал из Энциклопедии в свободной энциклопедии
Перейти к: навигация, поиск

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

Из выпущенных продуктов формат впервые применялся в dBase II в качестве стандартного формата базы. Точно не известно, использовался ли он где-нибудь ранее.

В новых версиях в dBase III, dBase IV в формат модифицировался и расширялся. В связи с высокой популярностью этих программ были созданы их многочисленные клоны (обычно их называют общим термином xBase), некоторые из которых использовали модифицированные версии DBF. То же самое происходило и с целым рядом прикладных пакетов и библиотек, использовавших DBF в различных целях. Одни их авторы шли по пути добавления новых типов полей, другие в вносили серьёзные расширения. В связи с отсутствием какой-либо официальной стандартизации в настоящее время сложно гарантировать, что разрабатываемая прикладная программа будет писать и читать произвольный DBF-файл, но базовая совместимость всё-таки сохраняется.

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

Первое поле всегда в пометка удаления (1 байт). Если оно равно 2A16 (символ «звёздочка»), считается, что запись помечена на удаление. Удалённые записи могут быть восстановлены или физически удалены при выполнении операции «упаковка» (команда PACK xBase).

С DBF-файлами могут быть так же сопряжены другие файлы в .DBT (dBase III, IV,Clipper), .FPT (FoxBASE/FoxPro) и, в некоторых случаях, какие-то ещё, предназначенные для хранения больших паллетных объектов переменной длины. .DBT/.FPT-файлы не являются самостоятельными и не могут быть прочитаны без соответствующего им .DBF файла. В связи с этим их описание обычно включают в качестве составной части описания формата .DBF.

Структура DBF-файла

DBF-файл состоит из двух частей:

  • заголовок
  • собственно записи


Схематично все это можно представить так:

Кол-во байт Наименование
32 Заголовок DBF-файла
32 Описание первого поля
32 Описание второго поля
... ...
32 Описание n-го поля
1 Завершающий символ 0x0D (13)
RecordSize Первая запись из n-полей
RecordSize Вторая запись из n-полей
... ...
RecordSize m-я запись из n-полей, где m=RecordsCount
1 Завершающий символ 0x1A (26)

Таблица 1. Структура DBF-файла

Описание заголовка DBF-файла

заголовок состоит из трех частей:

  • собственно заголовок
  • описание полей
  • завершающий заголовок символ 0x0D(13)

Размер "собственно заголовка" составляет 32 байта, каждый из которых несет строго определенное значение.

в„– байта Размер Значение Описание Используется
00 1 0x03(3) простая таблица FS, D3, D4, D5, Fb, Fp, CL
0x04(4) простая таблица D4, D5 (FS)
0x05(5) простая таблица D5, Fp (FS)
0x30(48) Visual FoxPro Fp
0x31(49) Visual FoxPro (поддержка автоинкремента) Fp
0x43(67) с мемо-полем .dbv FS
0xB3(179) с мемо-полями .dbv .dbt FS
0x83(131) с мемо-полем .dbt FS, D3, D4, D5, Fb, Fp, CL
0x8B(139) с мемо-полем .dbt формат D4 D4, D5
0x8E(142) SQL-таблица D4, D5
0xF5(245) с мемо полем .fmp Fp
01 1 YY Год последнего обновления таблицы Все
02 1 MM Месяц последнего обновления таблицы Все
03 1 DD День последнего обновления таблицы Все
04 4 RecordsCount Количество записей в таблице Все
08 2 HeaderSize Размер заголовка в байтах Все
10 2 RecordSize Размер записи в байтах Все
12 2 0x00,0x00 Зарезервировано Все
14 1 0x01 Начало транзакции D4, D5
0x00 Конец транзакции D4, D5
0x00 Игнорируется FS, D3, Fb, Fp, CL
15 1 0x01 Закодировано D4, D5
0x00 Нормальная видимость Все
16 12 0x00 Многопользовательский режим не используется D4, D5
0x01 Использование многопользовательского окружения D4, D5
28 1 0x02 Содержит Memo поля ?
0x01 Используется индекс Fp, D4, D5
0x00 Индекс не используется Все
29 1 ID Номер драйвера языка см. Таблицу 2 D3, D4, D5
0x01(1) кодовая страница 437 DOS USA Fp
0x02(2) кодовая страница 850 DOS Multilang Fp
0x26(38) кодовая страница 866 DOS Russian Fp
0x57(87) кодовая страница 1251 Windows ANSI Fp
0xC8(200) кодовая страница 1250 Windows EE Fp
0x00(0) игнорируется FS, D3, Fb, Fp, CL
30 2 0x00,0x00 Зарезервировано Все

Сокращения: FS = FlagShip Fb = FoxBase Fp = FoxPro CL = Clipper D3 = dBaseIII+ D4 = dBaseIV D5 = dBaseV


Таблица 2. Драйвера языка

Hex ID Описание Используется
0x00 OEM D3, D4, D5
0x01 Codepage_437_US_MSDOS D3, D4, D5
0x02 Codepage_850_International_MSDOS D3, D4, D5
0x03 Codepage_1252_Windows_ANSI D3, D4, D5
0x57 ANSI D3, D4, D5
0x64 Codepage_852_EasernEuropean_MSDOS D3, D4, D5
0x65 Codepage_866_Russian_MSDOS D3, D4, D5
0x66 Codepage_865_Nordic_MSDOS D3, D4, D5
0x67 Codepage_861_Icelandic_MSDOS D3, D4, D5
0x6A Codepage_737_Greek_MSDOS D3, D4, D5
0x6B Codepage_857_Turkish_MSDOS D3, D4, D5
0x78 Codepage_950_Chinese_Windows D3, D4, D5
0x7A Codepage_936_Chinese_Windows D3, D4, D5
0x7B Codepage_932_Japanese_Windows D3, D4, D5
0x7D Codepage_1255_Hebrew_Windows D3, D4, D5
0x7E Codepage_1256_Arabic_Windows D3, D4, D5
0xC8 Codepage_1250_Eastern_European_Windows D3, D4, D5
0xC9 Codepage_1251_Russian_Windows D3, D4, D5
0xCA Codepage_1254_Turkish_Windows D3, D4, D5
0xCB Codepage_1253_Greek_Windows D3, D4, D5


Таблица 3. Структура DBF-заголовка

Структура описания полей в заголовке DBF-файла

в„– байта Размер Значение Описание Используется
00 11 ASCII Имя поля с 0x00 завершением Все
11 1 ASCII Тип поля см. Таблицу 5 Все
12 4 n,n,n,n Адрес поля в памяти D3
0,0,n,n Смещение относительно начала записи Fp
0,0,0,0 Игнорируется FS, D4, D5, Fb, CL
16 1 Byte Размер поля см. Таблицу 5 Все
17 1 Byte Количество знаков после запятой Все
18 2 0,0 Зарезервировано Все
20 1 Byte Идентификатор рабочей области D4,D5
0x00 Не используется FS, D3, Fb, Fp, CL
21 2 n,n Многопользовательский dBase D3, D4, D5
0,0 Игнорируется FS Fb, Fp, CL
23 1 0x01 Установленные поля D3, D4, D5
0x00 Игнорируется FS Fb, Fp, CL
24 7 0..0 Зарезервировано Все
31 1 0x01 Поле включено в .mdx индекс D4, D5
0x00 Игнорируется D3, FS, Fb, Fp, CL

Таблица 4. Структура описания полей в заголовке DBF-файла

Код Размер Тип Описание/Размер Используется
C 1..n Char n ASCII символов Все
пустые места - пробел 0x20(32) Dct
n = 1..64Kbt FS
n = 1..32Kbt Fp, CL
n = 1..254 Все
D 8 Date 8 ASCII знаков (0..9) в формате YYYYMMDD Все
F 1..n Float ASCII символы(-.0123456789) переменная позиция плавающей точки n = 1..20 FS, D4, D5, Fp
N 1..n Numeric ASCII символы (-.0123456789) фиксированная позиция точки Все
n = 1..20 FS, Fp, CL
n = 1..18 D3, D4, D5, Fb
L 1 Logical ASCII символы (Yy Tt Nn Ff, пробел - не определено) FS, D3, Fb, Fp, CL
M 10 Memo 10 цифр, определяющих начало блока данных в .dbt-файле или 10 пробелов, если поле мемо пусто Все
V 10 Variable Переменная Bin/ASCII данных в .dbv-файле

4 Bin байтов - начало блока в мемо-файле
4 Bin байтов - размер блока
1 Bin байт - подтип данных
1 Bin байт - зарезервировано 0x1A(26) || FS

P 10 Picture Binary данные в .ftp-файле структура такая же как и в Memo-типе Fp
B 10 Binary Binary данные в .dpt-файле структура такая же как и в Memo-типе D5
G 10 General OLE-объекты структура такая же как и в Memo-типе D5, Fp
2 2 short int Binary int max +/- 32767 FS
4 4 long int Binary int max +/- 2147483647 FS
8 8 double Binary signed double IEEE FS

Таблица 5. Типы полей и их размеры

Завершает описание заголовка символ 0x0D(13)

Размер заголовка DBF-файла в байтах составляет: 32+32xN+1 байт, где N - количество полей. Этот же размер можно извлечь из 8,9 байтов заголовка - HeaderSize Следовательно количество полей равно: N:=(HeaderSize-33)/32 байт. Сместившись на HeaderSize байт от начала файла, мы переходим к непосредственно к самим записям, размер которых указан в 10,11 байтах заголовка - RecordSize , а их количество в 04..07 байтах - RecordsCount .

Структура записи в DBF-файле

Каждая запись имеет следующую структуру.

в„– байта Размер Описание Используется
0 1 Флаг удаления "*", иначе - пробел Все
1 1..n Различные типы полей фиксированной длины без завершающих символов длина поля n определяется в 16 байте структуры описания поля Все

Завершает DBF-файл символ 0x1A(26)

Таким образом, в общем случае запись - это строка символов (кроме FS), состоящая из частей (полей) строго определенного размера. Эти размеры указаны в структуре описания поля в 16-м байте.

[править] Ссылки

Источник в «/w/index.php?title=DBF&oldid=43146819»
Пространства имён

Варианты
Действия
На других языках