Разбор плоского файла данных для чтения / записи

Мне нужно подключиться к некоторым старым файлам базы данных C-tree Plus с 1998 года. Продукт снят с производства, но все еще используется сегодня в текущих выпусках программного обеспечения. Мне нужно иметь возможность как читать, так и писать, но нет доступного типа соединения ODBC, только доступ к файлам. Вот их образец:

http://64.72.211.216/zip.dat

http://64.72.211.216/zip.idx

Большая часть нужного мне контента хранится в виде целых чисел или строк, я могу увидеть это с помощью базового текстового редактора, но есть также двоичные / UTF / HEX-символы, которые необходимо отфильтровать. В файлах нет имен столбцов.

Мне нужно найти способ разобрать его в читаемую форму, например csv для чтения, а затем отменить его для записи.

У участвующих вендоров нет никакой помощи, честно говоря, я не уверен, что кто-либо в их компаниях знает, как это работает спустя более 20 лет с момента его разработки. Я потратил хороший час, пытаясь убедить людей из Faircom продать мне старый ODBC без какой-либо поддержки, но безрезультатно. Хотя некоторая документация все еще существует, библиотека ODBC для использования документации недоступна.

Я попытался связаться с Pervasive по поводу их DataConnect, но, очевидно, они отказались от синтаксического анализа плоских файлов в своей последней версии. Они сказали, что в их старой версии он был основан на awk.

Я нашел DataDirect на Progress.com интересным, но не получил от них никаких звонков, чтобы узнать, что возможно.

TextPipe Pro выглядит так, как будто его можно читать, но я не думаю, что смогу с его помощью писать.

Postgresql имеет обертки сторонних данных, которые будут анализировать CSV, я подумал о попытке создать фильтр на основе CSV для моих данных, но не был уверен, была ли это кроличья нора.

Я немного разбираюсь в C #, но не знаю, с чего начать. Насколько я понимаю, мне нужно определить «размер блока», который будет представлять одну строку, а затем преобразовать каждый столбец с фиксированной шириной в ANSI из того, что он сейчас есть. Затем экспортируйте каждую строку в формат csv, который можно было бы запросить.

Пожалуйста, скажите мне, что есть способ лучше. Может быть, библиотека синтаксического анализа, утилита, что-то вообще, что можно было бы интегрировать в приложение C #, которое запускается по расписанию в поисках обновлений.


person Alan    schedule 19.09.2018    source источник
comment
Таким образом, вы не хотите менять приложение - оно продолжит использовать этот файл в его текущем формате, но вам нужен внешний доступ к тому же файлу - не так ли? Или вы собираетесь заменить механизм обработки данных на что-нибудь другое?   -  person TomC    schedule 20.09.2018
comment
Является ли это предшественником ctree-Ace en.wikipedia.org/wiki/C-treeACE ??? в этом случае будут интерфейсы C / c ++ и, возможно, Delphi / .net. Интерфейса SQL может не быть   -  person Bruce Martin    schedule 20.09.2018
comment
Брюс, нет НИКАКИХ доступных интерфейсов .net. Все они были коммерческими продуктами, которые больше не продаются. Том, верно. Я получаю доступ к данным клиента, которые нельзя обновить до лучшего формата, я должен использовать их как есть. У меня нет доступа к data engine, поскольку нет драйверов ODBC или других интерфейсов для использования.   -  person Alan    schedule 20.09.2018
comment
У вас есть DODA для файла? Без этого вы не сможете использовать большинство новейших инструментов FairCom (они встроены в новые форматы). Я просканировал файл в шестнадцатеричном редакторе, и похоже, что в нем нет строковых полей переменной длины, поэтому лучше всего будет просто считывать необработанный двоичный файл в буферы (кажется, 65 байт на запись) и попробуйте реконструировать определения полей. Заголовок выглядит так, как будто он заканчивается на 0x81.   -  person Comintern    schedule 20.09.2018
comment
Определения столбцов содержатся в DLL от поставщика, который использовал Faircom C-Tree Plus для хранения своих данных. Вы правы насчет длины записи. Мне нужно просмотреть около 100 таблиц. Предполагая, что я могу правильно их проанализировать, если я изменю значение INT в столбце (не ID), мне, вероятно, придется обновить файл .idx? Будет ли .idx автоматически обновляться время от времени с сервера?   -  person Alan    schedule 20.09.2018
comment
К сожалению, ваш ответ не получил ответа. Я предполагаю, что вы не захотите вносить какие-либо изменения (обновление idx было бы чертовски невозможно без библиотеки). Есть ли в стороннем приложении функция переиндексации?   -  person Comintern    schedule 21.09.2018
comment
Думаю, они это сделали, но у меня нет возможности вызвать функцию. Я не думаю, что это будет иметь значение, исходя из столбцов, которые я планирую изменить   -  person Alan    schedule 21.09.2018
comment
Один из способов узнать ... :-D Пока вы не изменяете ничего, что является частью индекса, все будет в порядке. Добавление или удаление записей было бы непросто.   -  person Comintern    schedule 21.09.2018


Ответы (1)


  • какая версия использовалась для создания этого idx / dat? это DOS / старая версия Windows? или Unix / Mac?
  • попробуйте получить эту версию (она поставляется с полным api / source) и подходящий компилятор
  • если у вас есть исходный код, который можно перекомпилировать, добавьте несколько заголовков-оберток в свой проект C # и используйте C Dll (https://www.codeproject.com/Articles/9826/How-to-create-a-DLL-library-in-C-and-then-use-it-w)
  • Я знаю его старый, но тогда вы можете просто читать / записывать эти типы файлов с помощью C api c-tree (по крайней мере, это может означать, что вам нужно использовать какой-то старый компилятор DOS / Windows для тестирования)
  • это САМОЕ идеальное начало для анализа формата (см. этот инструмент: https://www.awportals.com/aw/archives/newsgroups/thread_468/).
  • возможно, у Faircom все еще есть старая версия - скажите им, что вам нужно найти ошибки в старом программном обеспечении, которые нельзя заменить, и эта библиотека отсутствует - не говорите им, что вы хотите проанализировать формат
  • или найдите старого продавца или людей в Интернете (google, reddit, stackoverflow), говорящих о c-tree, и спросите их, есть ли у них версия для вас «попробуйте найти C-Tree Plus Vx.y от 1988 года» - хороший вопрос на этих платформах
  • всегда переключайтесь между другими постами платформы
person llm    schedule 19.10.2018
comment
Думаю, вам придется выполнять двоичное чтение, а у вас есть определение файла? Это будет содержать длину заголовка, а затем длину каждой записи. - person China Syndrome; 19.10.2018