формат БД
У меня вопрос. Есть файловая БД.
Надо найти чем её можно открыть. И еще лучше чем к ней подключится.
файлик/и могу выслать на мыло. Тут ругается что много весят :(
Пробывал что то получить от winhex но увидел только начало - 43 4D 4D 49
Подскажите откуда начинать и куда капать.
2. если файлов несколько, они представляют БД в совокупности (если хотя бы одного файла нет - БД не работает), или каждый является фрагментом данных?
2. если файлов несколько, они представляют БД в совокупности (если хотя бы одного файла нет - БД не работает), или каждый является фрагментом данных?
Не знаю. Я надеюсь что каждый файл это отдельная таблица.
Сейчас дам линку на архивчик. Там несколько файлов.
Кто поможет - готов компенсировать затраченное время :)
http://files.shareservices.net/file.php?id=147
Интерес представляет только файл bin. Файлы pnt - это типа индексов, ddm и fdt - описание полей. В каком-то смысле, очень напоминает формат dbf, paradox или подобные (каждая таблица в отдельных 4 файлах). Если надо, могу оформить мысли по этому формату в пост (просто работа большая, поэтому и спрашиваю). Данные выдирал в таблицу без проблем, но если не программируете - информация моя вам не поможет.
Интерес представляет только файл bin. Файлы pnt - это типа индексов, ddm и fdt - описание полей. В каком-то смысле, очень напоминает формат dbf, paradox или подобные (каждая таблица в отдельных 4 файлах). Если надо, могу оформить мысли по этому формату в пост (просто работа большая, поэтому и спрашиваю). Данные выдирал в таблицу без проблем, но если не программируете - информация моя вам не поможет.
Вас не затруднит поговорить в он лайне? Меня интересует вся информация по поводу этих файлов.
Я программист. Но вот искать как вытащить данные не мой конек.
Через что Вам удобнее по общаться?
Я программист. Но вот искать как вытащить данные не мой конек.
Через что Вам удобнее по общаться?
Я тогда здесь размещу своё описание этого формата (для всеобщей пользы), а вопросы задавайте в ЛС.
у меня нет прав для ЛС :(
мне нужно выдрать из него данные. Пишу на vb. Надеюсь из Вашего описания у меня получится подцепится к БД...
мне нужно выдрать из него данные. Пишу на vb. Надеюсь из Вашего описания у меня получится подцепится к БД...
В течении сегодняшних суток предоставлю описание.
Всё нижеизложенное - строго моя исследовательская работа и никакие внешние источники информации не использовались (ничего не нашел).
Итак.
Обзор формата таблиц данных, целесообразнее начать с файла ddm, ибо прост как ini-файл.
[FILE1]
fdt = имя файла описания полей таблицы
[DDF]
cnt=количество полей
номер поля = имя поля,буква типа ; комментарий
Номер поля - от 1 по cnt, имя поля - всегда 2 символа, а с буквой типа заморочки, потому как - что по-английски I, то по-немецки D (тут самостоятельная работа)
...
[GCX]
Было замечено только одно значение FeldDispLen. Для чего оно - хз, но думаю, что как-то к отображению на экране относится (не экспериментировал).
[SIZE="3"]Формат fdt-файла.[/SIZE]
-------------------------
Сложный, собака. Не всё понял, но то что узнал - в таблице.
1. Заголовок
Всегда (во всяком случае - у всех мною обрабатываемых) имеет размер 54 байта.
Смещение Размер Описание
--------------------------------------------------------------------------------
0 2 байта 1) Размер заголовка
2 2 байта 2) Количество полей, представленных в битовой маске (описание в bin)
4 2 байта 3) Количество полей
6 2 байта 4) ???
8 13 байт 5) Имя файла таблицы
22 13 байт 6) Имя файла индексов
36 2 байта ???
38 2 байта Размер индекса (?)
40 2 байта ???
42 2 байта ???
44 2 байта Количество ключевых полей (не более 4-х)
46 3 байта имя ключевого поля
... (если полей меньше, чем 4, то добито нулями (0x00) до размера заголовка, указанного по смещению (0)).
2. Типы и размеры полей
Перечисляются сразу после заголовка.
Размер Описание
--------------------------------------------------------------------------------
3 байта Имя поля (ASCIIz)
2 байта Размер поля
2 байта Тип счетчика (ниже объясню)
2 байта ???
2 байта ???
2 байта Тип поля. Тут такая штука: типы заданы кодом. Вот некоторые, которые понял:
0x0a: беззнаковый символьный (unsigned char)
0x012: знаковый символьный (char)
0x14 и 0x16: знаковый целочисленный (int)
0x22: символьная строка, указанной длины (char[...])
Соответственно, длина указана в "Размере поля"
3. Еще один блок (тоже описания полей)
Идет сразу за блоком типов и размеров полей.
Размер Описание
--------------------------------------------------------------------------------
2 байта Смещение поля от начала записи из файла bin
2 байта Размер поля в байтах
2 байта ???
2 байта Порядковый номер поля (от нуля)
4. Полные названия полей
Последний блок.
Размер Описание
--------------------------------------------------------------------------------
2 байта Размер строки с названием
--- Сама строка (ASCIIz)
[SIZE="3"]Формат bin-файла[/SIZE]
Каждый файл с расширением bin - это одна таблица. Состоит из только из строк, без заголовка и прочего.
Строки имеют следующий формат:
Размер Описание
----------------------------------------------------
2 байта Длина записи
----- Собственно, запись с полями (по формату из FDT-файла)
Подробности опишу завтра. Есть там пара хитростей (с битовой маской, например). Еще индексный файл останется, но для целей конвертации во что-то удобоваримое - он нам не нужен.
Итак, расписывать не буду, просто пройдем по паре записей предложенной таблицы и всё станет ясно:
00000000: 26 00 01 90 02 00 00 00 01 1E 3D 3D 3D 3D 3D 3D
00000010: 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D
00000020: 3D 3D 3D 3D 3D 3D 3D 3D 26 00 01 90 03 00 00 00
00000030: 01 1E 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
00000040: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
1. Читаем 2 байта размера записи (26 00): длина записи - 38 байт
2. Читаем байт размера битовой маски полей (01): длина маски - 1 байт
3. Читаем этот один байт маски (90): в двоичном коде - 10010000.
А вот тут распишем для ясности:
...
[DDF]
1=AA,D ;TS
2=AB,K ;Kennzeichen
3=AC,S ;Kurztext
4=AD,S ; Text
5=AE,S ; Synonyme
...
На полученной маске 10010000:
+---+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
+---+---+---+---+---+---+---+---+
T K K T S
S e u e y
n r x n
n z t o
z t n
e e y
i x m
c t e
h
e
n
Отсюда видно, что в данной записи присутствуют поля только TS и Text.
4. Поле TS имеет тип D (очевидно целочисленная 32-х битовая). Читаем 02 00 00 00 (число - 2, наверное просто номер строки)
5. Поле Text имеет тип S (очевидно строка переменной длины). Поэтому читаем байт размера длины строки 01: - размер длины строки - 1 байт.
6. Читаем этот один байт 1E: длина строки - 30 байт.
7. Читаем 30 байт поля Text. Получаем строку: ==============================
8. Чтение записи завершено. Повторить с начала всех для последующих строк :)
С другими типами полей и методами их чтения - экспериментируем.
upd: Вспомнил, что формат этой базы - от конторы LexCom, а формат графики - от flexcat.
(прошу прощения за оффтоп)
Так далеко не вникал, но полазил по softwareag, и да, действительно. Очень похожи. Учитывая, что эта контора так же немецкая, много становится очевидным. :)
Кстати, заметил, что формат обновлений спец.справочников на этой БД, изменяется с периодичностью в полгода. А новые версии справочников выходят уже с новой структурой. Стало быть, необходимо более пристальное наблюдение за этими ребятками.
Ну, пока время есть, можно еще поковыряться. Давай вводную. т.е какую базу ковыряешь, где скачать, что сам уже нарыл и т.д. Самое главное: чего нужно в результате?
Есть мнение (и не только моё), что в .fdt это надлежит узнавать.
Интерес представляет только файл bin. Файлы pnt - это типа индексов, ddm и fdt - описание полей. В каком-то смысле, очень напоминает формат dbf, paradox или подобные (каждая таблица в отдельных 4 файлах). Если надо, могу оформить мысли по этому формату в пост (просто работа большая, поэтому и спрашиваю). Данные выдирал в таблицу без проблем, но если не программируете - информация моя вам не поможет.
Хотелось бы попрограммирывать, так сказать прочуствовать все из нутри. Вроде бы все ясно, но не могу понять с чего начать. Если не сложно можешь в двух словах описать алгоритм (например: 1) найти все файлы ddm; 2)читаем ddm...)
В конечном результате хочу получить БД (программы ETKA7) и сохранить в формате MySQL.
В конечном результате хочу получить БД (программы ETKA7) и сохранить в формате MySQL.
Ох, грехи мои тяжкие. :facepalm: Ну, давайте в двух словах.
1.Определяем структуру каталогов справочной системы. Она (структура каталогов) сильно отличаться в разных справочниках.
2. Находим каталог, в котором и лежат файлы справочника. Опять же, можно поискать что-то типа файла конфигурации, где и будет указан нужный каталог. А так как каталог с данными может быть не один (например: \epc\data1\a, epc\data1\b, \epc\data2\a и т.д.), не лишним будет составить список каталогов в котором это безобразие находится.
2.5. Заходим в каталог по списку.
3. Читаем .fdt файл, определяем структуру и поля конкретной таблицы и читаем уже таблицу (bin).
4. Проводим мозгоразрывающие манипуляции с записями. Без шуток: там такая структура записей попадается, что полный вперед.
5. При помощи SQL запросов отправляем поля нужной таблицы в базе на MySQL.
6. Повторяем с п.3, пока не кончатся файлы. Потом повторяем с п.2.5.
7. ???
8. PROFIT!
Путь к успеху какой-то такой. ;)
P.S. Кстати, многие .bin - файлы идут без описаний в .fdt, но тут уже думать, думать и думать.
P.P.S. Можно наковырять утилиты для ковыряния ADABAS-овских баз и замучить всех вопросами на форуме разрабов.
Искал, но закономерности не нашел, в итоге добавил обработчик исключения. Начинаю читать, если сбивается в начале, то для этой таблицы в настройках, ставлю признак - "читать с маской", и на автомате повтор чтения уже по новым правилам. Криво, сам знаю, но задержка минимальная, т.к. всегда сбивается в первых строках.
А какую базу читаете? Скачаю, покопаюсь.
Личку включи.
Кста, качнул я ETKу. Не пойму, где базы?
Кста, качнул я ETKу. Не пойму, где базы?
Всегда были в:
ETKA\DATA\AU\
или ETKA\DATA\... и т.д.
Как ваши успехи? Разобрались с форматом? Что думаете по поводу Adabas?
Как ваши успехи? Разобрались с форматом? Что думаете по поводу Adabas?
Общие корни, не более того.
Жаль. Значит ODBC привинтить не удастся.
Личка не работает, как можно связаться с тобой идеи обсудить?
Личка не работает, как можно связаться с тобой идеи обсудить?
Да тут и обсуждайте. Всем же интересно.
Неточности, выявленные в описании у Lerkina:
Ага,мы всё поняли
А так, да. Неточности обязательно присутствуют, так как материальчик совершенно сырой был, и вообще, левой ногой разбирался.
Залей нормального качества картинку пожалуйста, ничегошеньки не видно ж совсем))
Копаю щас формат графики, как разберусь - поделюсь тоже.
А так, да. Неточности обязательно присутствуют, так как материальчик был совершенно сырой был, и вообще, левой ногой разбирался.
Пробую еще раз! (маленький шаг для одного человека и т.д.)[ATTACH=CONFIG]5369[/ATTACH]
Личка не работает, как можно связаться с тобой идеи обсудить?
[email]numberhumber@yandex.ru[/email]
4 месяца сюда не заглядывал, может уже забыл всё.