как лучше организовать парсер вынесеный в dll
От: Аноним  
Дата: 13.04.07 22:09
Оценка:
Привет всем... собственно сабж

Расскажу подробней... у меня стоит задача разбора сообщений SWIFT орентированного формата. Собственно мне сей разбор задолбало делать — хочу написать хорошую dll или библиотеку dll в который вынести сей таск и потом везде юзать (и не только я буду юзать).
пример файла:

"SOH/001/01/050411

{1:/050411/00001OP00000/005041112310007F}...{4:
:20:0504111231036022
:12:331
...
...
-}{5:/BE901BA6}
...

ETX
{5:/38B017BD}"

например на вход подается такоее собщение "{1:/050411/00001OP00000/005041112310007F}...-}{5:/BE901BA6}" На выходе надо получить масив
Block1.1 — 050411
Block1.2 — 00001OP00000
...
RefNum.1 — 0504111231036022
...

Думаю сие написать на С++ с подключением Regex (класс регулярных выражений с .Net) но собственно опыта в этой сфере большого не имею + желательно юзание сих dll в других средах (Delphi,Java и т.д.)

если кто может подсказать как сие лучше организовать (если есть время — пожалуйста объясните в деталях) или подсказать где можно найти понятные доки по этой теме (msdn я замучался колупать... (может мне кажется но в VS 6.0 мсдн был гораздо понятней)).

Зарание большое спасибо.

З.Ы. приму советы по всем стадиям и деталям процесса — от организации внутреннего взаимодействия до форматов входных-выходных параметров.
Re: как лучше организовать парсер вынесеный в dll
От: Andrew_D  
Дата: 14.04.07 07:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет всем... собственно сабж


boost::regex
Самое простое — посмотреть на интерфейс, что выставляет этот класс и написать вокруг него класс-обертку, наследующий интерфейс, коим и будут пользоваться все клиенты.

Если сделать комовый модуль, то что-то вроде этого :

interface IRegex
{
     // _matches - any collection of strings, for example SAFEARRAY of BSTR
     STDMETHOD(Parse)([in] BSTR _regex, [in] BSTR _text, [in] VARIANT _params, [out,retval] VARIANT* _matches)=0;
};
Re: как лучше организовать парсер вынесеный в dll
От: Left2 Украина  
Дата: 14.04.07 08:40
Оценка:
Ещё один вариант — в ATL есть CAtlRegExp. Он конечно не такой мощный как бустовский, но для твоих задач его запросто может хватить.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: как лучше организовать парсер вынесеный в dll
От: InTO  
Дата: 14.04.07 12:22
Оценка:
Здравствуйте, Andrew_D, Вы писали:

A_D>boost::regex


а regex из .Net не катит?
Re[3]: как лучше организовать парсер вынесеный в dll
От: InTO  
Дата: 14.04.07 13:38
Оценка:
гмм.. нашел тесты http://www.solarix.ru/for_developers/cpp/boost/regex/en/vc71-performance.shtml
там лучше всех показала Грета http://research.microsoft.com/projects/greta/

цитата из мануала "GRETA is about 7 times faster than the regex library in boost (http://www.boost.org), and about 10 times faster than the regular expression classes in ATL7. "
Re[3]: как лучше организовать парсер вынесеный в dll
От: Andrew_D  
Дата: 14.04.07 14:24
Оценка:
Здравствуйте, InTO, Вы писали:

ITO>Здравствуйте, Andrew_D, Вы писали:


A_D>>boost::regex


ITO>а regex из .Net не катит?


Если есть возможность тащить с собой framework, то почему бы и нет?
Re[4]: как лучше организовать парсер вынесеный в dll
От: Andrew_D  
Дата: 14.04.07 14:29
Оценка:
Здравствуйте, InTO, Вы писали:

ITO>гмм.. нашел тесты http://www.solarix.ru/for_developers/cpp/boost/regex/en/vc71-performance.shtml

ITO>там лучше всех показала Грета http://research.microsoft.com/projects/greta/

ITO>цитата из мануала "GRETA is about 7 times faster than the regex library in boost (http://www.boost.org), and about 10 times faster than the regular expression classes in ATL7. "


Хм ... судя по тестам однозначно говорить о превосходстве Греты нельзя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.