Откуда взялся DBF
DBF — файл таблицы из программы dBase. Компания Ashton-Tate выпустила её под названием dBASE II в 1980 году, по данным статьи о dBase в английской Википедии. Тот же формат с доработками использовали FoxPro, Clipper и Visual FoxPro.
В одном файле лежат и описание столбцов, и сами данные. Программе не нужно заранее знать устройство таблицы: она читает его из начала файла.
Чем открыть DBF
- Прямо на нашем сайте. Перейдите по этой ссылке и загрузите ваш файл. Вы сможете просмотреть его и отредактировать. А ещё на нашем сайте можно перевести .dbf файл в CSV, Excel, JSON, SQL или XML.
- Excel открывает таблицы dBase III и dBase IV, но сохранить файл в DBF не даёт, по списку форматов Excel.
- LibreOffice Calc открывает и сохраняет DBF, при этом формулы и оформление пропадают, по справке LibreOffice.
Где DBF встречается сейчас
Расширенная поддержка Visual FoxPro 9.0 у Microsoft закончилась в январе 2015 года, по странице жизненного цикла продукта. Таблицы DBF при этом продолжают читать и создавать программы, которые развиваются сейчас:
- в 1С:Предприятии для DBF есть объект XBase: он создаёт таблицы произвольной структуры и индексы, по описанию платформы на сайте 1С;
- в картографическом формате shapefile атрибуты объектов хранятся в сопутствующем файле .dbf, по документации библиотеки GDAL. Кодировку GDAL берёт из файла .cpg, а если его нет, из байта кодовой страницы в самом DBF;
- Harbour, свободный компилятор, совместимый с Clipper, работает с таблицами через драйверы DBFNTX, DBFCDX и DBFFPT, по описанию проекта на GitHub.
Из чего состоит файл
Файл делится на три части: заголовок, описания полей и записи. Числа в служебных байтах записаны младшим байтом вперёд.
| Байты, счёт с нуля | Что лежит в заголовке |
|---|---|
| 0 | версия формата: 0x03 у dBase III без memo, 0x83 у dBase III с memo, 0x30 у Visual FoxPro |
| 1–3 | дата последнего изменения: год, месяц и день |
| 4–7 | число записей |
| 8–9 | где начинаются записи: длина заголовка вместе с описаниями полей |
| 10–11 | длина одной записи вместе с байтом пометки удаления |
| 29 | кодовая страница |
Раскладка — по справке Visual FoxPro о структуре таблицы.
За заголовком идут описания полей, по 32 байта на поле: имя до 10 знаков,
буква типа, ширина в байтах и число знаков после запятой. Список заканчивается
байтом 0x0D.
Записи идут подряд, без разделителей, и у всех одна длина. Начало записи
с нужным номером программа считает так: длина заголовка плюс номер, умноженный
на длину записи. Поэтому значение можно поправить на месте, не переписывая
остальной файл. В конце файла
обычно стоит байт 0x1A.
Типы полей
Тип поля решает, что в него можно записать: текст, число, дату или «да/нет». Обозначают тип одной латинской буквой. Кроме типа, у поля есть ширина: сколько знаков в него помещается.
| Буква | Что хранит | Пример | Что учесть |
|---|---|---|---|
| C | текст | Сверло 6 мм | до 254 знаков; что не влезает в ширину поля, обрезается без предупреждения |
| N | число | 189.50 | ширину и число знаков после точки задают заранее; если число не помещается, результат непредсказуем |
| F | число | 0.075 | задаётся так же, как N |
| D | дата | 14.02.2026 | в файле записана как 20260214: год, месяц, день |
| L | да или нет | да | в файле T или Y значит «да», F или N значит «нет», знак ? значит «не заполнено» |
| M | длинный текст | примечание на несколько абзацев | сам текст лежит в отдельном файле, см. «Файлы рядом с таблицей» |
В таблицах Visual FoxPro встречаются ещё четыре типа: I (целое число), Y (деньги), T (дата со временем) и B (число двойной точности), по справке Visual FoxPro. В описании типов dBase их нет.
Файлы рядом с таблицей
Поле memo хранит только номер блока, а сам текст лежит в отдельном файле с тем же именем. У dBase расширение такого файла .dbt, у Visual FoxPro .fpt, по списку расширений Visual FoxPro. Без этого файла содержимое memo не прочитать.
Индексы тоже лежат отдельно: .ndx и .mdx у dBase, .ntx у Clipper, .idx и .cdx у FoxPro, по той же статье о dBase. Чтобы открыть таблицу на этом сайте, индекс не нужен.
Кодировка
Номер кодовой страницы лежит в байте заголовка со смещением 29. Русским кодировкам в таблице разборщика dbfread соответствуют такие значения:
0x26и0x65: кодировка DOS, cp866;0xC9: кодировка Windows, cp1251;0x00: ASCII, то есть русская кодировка в файле не указана.
При нулевом байте кодировку подбирают по тексту. Слова «Сверло по металлу» из таблицы в кодировке Windows, открытые как DOS, выглядят так: «╤тхЁыю яю ьхЄрыыє». Обратная ошибка даёт «‘ўҐа«® Ї® ¬Ґв ««г».
На странице просмотра кодировка переключается в списке, и таблица перечитывается.
Пометка удаления
Первый байт каждой записи — пометка: пробел у обычной записи, звёздочка у удалённой, по справке Visual FoxPro. Удаление ставит звёздочку, и запись остаётся в файле.
Пока запись на месте, пометку можно снять: в Visual FoxPro для этого есть команда RECALL, по справке о восстановлении записей. Насовсем помеченные записи убирает упаковка таблицы. Функция dbase_pack в PHP, по её руководству, удаляет их безвозвратно.