PDA

Показать полную графическую версию : [решено] Получение коннекта к базе данных, путем анализа файла IDAPI32.CFG программы BDE Admin


caimac
05-07-2012, 20:47
Здравствуйте!
За ранее хочу извиниться если что то не так сделал, очень редко приходилось задавать вопросы в форумах, я в этом деле новичок.
Есть задача, в общем плане такая:
Имеется СУБД firebird и база данных, коннект к базе данных прописывается в программе BDE Administrator 5.01 и хранится в файле :
%programfiles% \Borland\Common Files\BDE\DAPI32.CFG (путь по умолчанию)
Коннект имеет вид, к примеру база находится на компьютере с ip адресом 192.168.0.1
Коннект: 192.168.0.1:C:\Base\base.gdb
Задача в том что бы получить этот путь, например записать в текстовый файлик или в переменную, возможно есть какой то другой способ, если есть подскажите какой (точно есть при использовании языков программирования, но я не программист), я пытался решить это путем анализа файла DAPI32.CFG с помощью цикла for /f, в cmd, но столкнулся с проблемой, файл анализируется только в том случае если его предварительно открыть, нажать «энтер» (сделать перевод каретки) и сохранить (возможно звучит глупо, не знаю в чем дело), причем перевод каретки «батником» не помогает. В написании батников опыт небольшой. Прикрепляю файл IDAPI32.CFG в архиве.

Код «батника» с помощью которого осуществлялся анализ файла:

assoc .cfg=txtfile
for /f "tokens=15 delims=" %%A in (IDAPI32.CFG) do echo %%A>alias.txt
assoc .cfg=

Anonymоus
05-07-2012, 21:08
файл анализируется только в том случае если его предварительно открыть, нажать «энтер» (сделать перевод каретки) и сохранить (возможно звучит глупо, не знаю в чем дело) »
Проблема в том, что это - бинарный файл.
Это замечательно решается grep'ом с принудительным указанием формата данных, как текст. Так, как полученные данные содержат управляющий символ (0x04\EOT), в связи с чем выделение пути средствами for delims затруднено, они передаются по конвееру в find, который отрезает их. На выходе получаем чистый адрес:путь.

For /F "delims=" %%A In ('Grep -Eoi --binary-files=text "SERVER NAME.*[.]GDB" "%ProgramFiles%\Borland\Common Files\BDE\DAPI32.CFG"^|Find ".GDB"') Do (Echo %%A)

Для работы скрипта нужен grep из пакета GNU core utils для Windows, его можно взять отсюда (http://gnuwin32.sourceforge.net/packages/grep.htm).

Nahim
21-01-2014, 11:05
Добрый день, попробую оживить тему:

а как можно узнать используя
For /F "delims=" %%A In ('Grep -Eoi --binary-files=text "SERVER NAME.*[.]GDB" "%ProgramFiles%\Borland\Common Files\BDE\DAPI32.CFG"^|Find ".GDB"') Do (Echo %%A)

SERVER NAME известного алиаса, если в BDE алиасов несколько?




© OSzone.net 2001-2012