Поиск по шаблону (regexp) в С++
PCRE кажись. Глянь в инете.
Угу... точно...
sscanf(s, "DataColumn = %d Energy = %lf - %lf GeomFactor = %lf DeltaT = %lf", &datac, &e1, &e2, &GeomFactor, &Delta);
man 3 regex. Находится в библиотеке под названием libc, в ОС, которые пытаются соответствоватьPOSIX.2. А libpcre - альтернативный вариант, который не на всех системах присутствует.
Судя по названию, этих библиотек в борланд с++ билдере нет и не будет.
Спасибо.
TRegExpr
1. Скачать, распаковать архив
2. Скопировать RegExpr.pas, например, в директорию с будущим проектом
3. В билдере сделать Project->Add to project, добавить этот RegExpr.pas в проект
4. Выбрать его среди закладок в редакторе и скомпилировать этот юнит: Project->Compile unit
5. Сделать File->Include unit hdr и выбрать скомпилированный RegExpr
Начать писать. Например:
1. Скачать, распаковать архив
2. Скопировать RegExpr.pas, например, в директорию с будущим проектом
3. В билдере сделать Project->Add to project, добавить этот RegExpr.pas в проект
4. Выбрать его среди закладок в редакторе и скомпилировать этот юнит: Project->Compile unit
5. Сделать File->Include unit hdr и выбрать скомпилированный RegExpr
Начать писать. Например:
TRegExpr* R = new TRegExpr;
int i;
R->Expression = "Title\\s*=\\s*(\\S+)\\s+Energy\\s*=\\s*(\\d+)";
if(R->Exec("Title=trtrt Energy=123"{
do{
for(i=0; i<=R->SubExprMatchCount; i++){
Application->MessageBoxR->Match[i]).c_str "", MB_OK);
}
}while(R->ExecNext;
}
Оставить комментарий
Elina74
1. Возможен? Какие библиотеки за это отвечают?К примеру, из строки типа
"DataColumn = 13 Energy = 17.7 - 27.9 GeomFactor = 0.03 DeltaT = 0.1"
надо вытянуть число после "GeomFactor".
Конечно, можно и так написать, руками, но не верится, что это еще не сделано до нас.
2. Есть ли такие библиотеки в Borland C++ Builder 4? (я типа искал, но не нашел)