Попытка чтения необработанного файла базы данных - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь прочитать данные из файла базы данных (какая структура данных c-tree сотрудников). Это очень старый продукт, и по разным причинам драйверы ODBC мне больше не доступны.

То, что я обнаружил, это то, что данные в основном просто построчно "плоский файл". Поэтому я планирую просто прочитать необработанные двоичные данные из файла и, по сути, создать свой собственный собственный ODBC.

Используя инструмент, предоставленный самой компанией c-tree, я даже смог получить подробную информацию о каждом адресе поля (т. Е. Где он начинается), его длине (длине байтового массива) и столбце, который я предположим, на самом деле говорит мне, как поле кодируется (см. ниже):

ADDRESS  LENGTH  TYPE(encoding?)        FIELD NAME
0        8       (128-0x80) CT_ARRAY    Reserved
8        4       (59-0x3B) CT_INT4U     Record_ID
12       2       (41-0x29) CT_INT2U     Type
14       2       (41-0x29) CT_INT2U     Changes
16       52      (144-0x90) CT_FSTRING  Name

Правильно ли я считаю, что что-то вроде "(128-0x80)" должно быть единственной информацией, которая мне нужна для декодирования поля в фактический текст? Или, скорее всего, есть какое-то дальнейшее шифрование, которое я здесь не рассматриваю?

Также кто-нибудь может мне сказать, что именно "(128-0x80)"? Я распознаю 0x80 как гекс, но что означает 128? С, по крайней мере, некоторой терминологией, описывающей эту вещь, я мог бы провести еще несколько исследований в Google.

Заранее спасибо!

1 Ответ

0 голосов
/ 06 ноября 2018

Эта кодировка типа является чисто внутренней как наше представление байтового значения этого типа данных.

Например: 80x (шестнадцатеричный) = 128 (десятичный) = тип данных CT_ARRAY и аналогично для остальных.

АДРЕС ДЛИНА ТИПА (кодировка?) ИМЯ ПОЛЯ

0 8 (128-0x80) CT_ARRAY Зарезервировано

8 4 (59-0x3B) CT_INT4U Record_ID

12 2 (41-0x29) CT_INT2U Тип

14 2 (41-0x29) CT_INT2U Изменения

16 52 (144-0x90) CT_FSTRING Имя

Вы можете просмотреть описания типов данных онлайн в документации: https://docs.faircom.com/doc/ctreeplus/28396.htm

Вероятно, это запись фиксированной длины. Записи переменной длины будут содержать 10-байтовый заголовок для каждого, который необходимо учитывать. Кроме того, это выглядит как 1-или 2-байтовая (16-битная прикладная) упакованная выровненная запись данных, которую всегда следует учитывать. Другие выравнивания, определенные компилятором C-структуры, усложнят извлечение данных.

Поле «Зарезервировано» может быть просто меткой-заполнителем для нашей 1-байтовой метки удаленной записи и значения стека удаленных записей (также описанного в нашей документации). Однако он также может содержать специфические данные приложения, относящиеся только к этому приложению, поскольку его длина составляет 8 байтов.

Не должно быть никакого другого шифрования или кодирования данных (конечно, нет Unicode).

К сожалению, этот драйвер ODBC более не поддерживается. Для вас есть способ легко извлечь все данные, как это было задумано с базой данных c-treeACE, но вам нужно будет связаться со службой поддержки FairCom для получения дополнительной информации. Ссылка для поддержки: faircom.com / support .

...