LINUX.ORG.RU

Как прочитать DBF (DOS) файл?


0

0

Вот нужно dbf досовские конвертнуть, 
а ни одна dbf-тулза файл не читает...

Взял формат тут: http://www.hardline.ru/3/36/687/

Типы файлов с данными:
FoxBASE+/dBASE III +, без memo - 0х03
FoxBASE+/dBASE III +, с memo   - 0х83
FoxPro/dBASE IV,      без memo - 0х03
FoxPro                с memo   - 0хF5
dBASE IV              с memo   - 0x8B  

А вот что такое 0x06?

06 00 0c 15 05 00 00 00  62 00 17 00 00 00 00 00  |........b.......|
00 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00  |................|
43 4f 44 5f 53 54 41 54  00 00 00 4e 1c 90 b4 e1  |COD_STAT...N.░?А|
02 00 4d 45 5f 53 54 41  54 00 00 3e 64 75 02 00  |..ME_STAT..>du..|
4e 41 4d 45 5f 53 54 41  54 00 00 43 1c 90 b4 e1  |NAME_STAT..C.░?А|
14 00 4d 45 5f 53 54 41  54 00 00 3e 64 75 02 00  |..ME_STAT..>du..|
0d 00 45 01 fe b3 8e 7a  3c ba 06 0c 31 a7 d7 89  |..E.ЧЁ▌z<╨..1╖в┴|
d6 e8 be 09 ff b9 69 c0  36 45 01 3e 95 0f 9c 24  |жХ?.Ъ╧iю6E.>∙.°$|
3e ae d6 31 a7 d7 89 d6  e8 be 09 ff b9 69 c0 36  |>╝ж1╖в┴жХ?.Ъ╧iю6|
45 01 7e 95 0f 9c 24 3e  d6 d6 91 57 c7 4b d9 6a  |E.~∙.°$>жж▒WгKыj|
be 49 02 00 2f ce 36 45  01 bf 34 aa 72 b6 2a 2a  |?I../н6E.©4╙r╤**|
ec f7 a7 d7 89 d6 e8 be  09 ff b9 69 c0 36 45 01  |ЛВ╖в┴жХ?.Ъ╧iю6E.|
ff 34 8e 7a bb 3e a6 10  31 98 ef d0 dd b4 d6 cb  |Ъ4▌z╩>?.1≤Опщ?жк|
ff f9 29 ce 36 1a                                 |ЪЫ)н6.|
anonymous

Документик староват.

Структура заголовка файла данных для таблицы dBASE IV 2.0.
Для 0-го байта. Контроль файла dBASE IV: биты 0-2 указывают номер версии, бит 3 - наличие MEMO-файла dBASE IV, биты 4-6 - наличие SQL-таблицы, бит 7 - наличие любого MEMO-файла (или dBASE III Plus, или dBASE IV)
Взято отсюда - http://articlesd.hut.ru/docum/dbfall.php

Вы поройтесь в сети, может найдете более поздние описания.

kosmonavt
()
Ответ на: комментарий от kosmonavt

А как раскодировать русские символы(dos кодировка не помогает) и понять, что за тип 0x06 в первом байте. Hex dump файла я привел выше.

anonymous
()
Ответ на: комментарий от anonymous

>что за тип 0x06

0x06=110b т.е. 2-я версия + MEMO. Все программы записи DBF, которые я видел выставляли 7-й бит. Возможно вайл битый, но я не уверен. Если вас не нитересуют поля типа MEMO и OLE, то на тип можете не обращать внимания, а эти поля игнорировать. В вашем документе не хватает описания полей с плавающей точкой, они даны по первой ссылке, которую я дал.

>А как раскодировать русские символы(dos кодировка не помогает)

Не совсем вас понял. Разве символьные поля не в dos? А вы уверены, что там русский текст?

kosmonavt
()
Ответ на: комментарий от kosmonavt

Все программы записи DBF, которые я видел выставляли 7-й бит - имею ввиду, что, вместе с 3-м битом выставлялся 7-й.

kosmonavt
()
Ответ на: комментарий от kosmonavt

Да, там должен быть русский текст, файл нормальный. С ним в паре еще cdx

Есть такая утилита DBFReader, там даже есть DOS/WIN, но русский все равно не показывает. По идее, даже блокнот должен русский показать в dos кодировке.

Собственно, эти файлы надо бы сконвертировать в txt, но все доступные утилиты с этим не справляются.

anonymous
()
Ответ на: комментарий от anonymous

Обнаружил русский в cdx файле(индекс), как читать связку cdx/dbf?

Bидимо тулзы cdx не учитывают ...

anonymous
()
Ответ на: комментарий от anonymous

вобщем попробуй зайти на http://decoder.design.ru и введи кракозябры в формочку. Если оно декодирует хотябы часть текста, то тогда оно покажет сверху путь перекодировки(win->mac->koi8 или что то в этом роде). если будет переокдировано только часть файлов и текст станет осмысленным, то простым перебором символов можно додекодировать полученный текст.

Т.е. если исходная фраза была 'мама мыла раму', а декодер пишет '"а"а "ыла ра"у', то символ " по видимому значит букву 'м',т.е. я так иногда справлялся с левыми текстами...

vilfred ☆☆
()
Ответ на: комментарий от vilfred

у меня подозрение что весь русский тект с индексе(cdx), а в dbf хрен знает что. Так что надо подумать как из cdx его вытащить.

Да, еще FoxPro ругается, что dbf - это не его файл базы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.