Откуда взялся 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, по её руководству, удаляет их безвозвратно.

Нашли ошибку?