[Volgograd] parse file
Serge S. Fukanchik
fuxx на mail.ru
Сб Май 3 20:08:43 MSD 2003
Dwarf wrote:
> On Sat, May 03, 2003 at 11:49:10AM +0400, Serge S. Fukanchik wrote:
>
>>Тебе помогут регулярные выражения
>
>
> Фукс, а я не догадался... Каким образом это прописать? Маленький
> пример можешь кинуть?
>
Такой пойдет?
--
fuxx
----------- следущая часть -----------
#include <unistd.h>
#include <sys/types.h>
#include <regex.h>
#define POS_TIME 1
#define POS_TITLE 2
#define POS_ABSTRACT 3
#define POS_LINK 4
void
fail (int err, regex_t *preg)
{
char buf[256];
regerror(err, preg, buf, 255);
printf("regex error: %s\n", buf);
exit(-1);
}
char *rexpr, *rstr;
regex_t reg;
regmatch_t match[5];
void
reg_init(char *e)
{
int ret;
rexpr = e;
ret = regcomp(®, rexpr, 0);
if(ret) fail(ret, ®);
}
void
reg_match(char *str)
{
int ret;
rstr=str;
ret = regexec(®, rstr, 5, match, 0);
if(ret) fail(ret, ®);
}
void
reg_free()
{
regfree(®);
}
void
print_match (unsigned int pos, const char *title)
{
int i;
printf (title);
if(-1 != match[pos].rm_so)
for(i = match[pos].rm_so; i < match[pos].rm_eo;++i)
printf("%c", rstr[i]);
putchar ('\n');
}
int main(int argc, char *argv[])
{
int i;
char *expr = "\\[\\([0-9]*:[0-9]*\\)\\] \\([^\\.]*.\\)\\(.*\\)\\(http://.*\\)";
char *str[] = {"[13:54] Новая графическая оболочка для МС_ДОС."
"Новинка будет отличатся простым в использовании графическим интерфейсом,"
" а также поддержкой многозадачности. http://www.compulenta.ru/2003/4/1/38697/",
"[12:46] Революционная операционная система от \"Микрософт\"."
"Cистема научилась работать с накопителями на жестких магнитных дисках,"
" имеющих значительно больший объем, чем дискеты - до 10 Мб. "
"http://www.compulenta.ru/2003/4/1/38709/",
"[12:09] В Чикаго создадут общегородскую радиотелефонную сеть."
"Со специального радиотелефона можно будет совершать и принимать звонки с любых телефонных номеров,"
" в том числе, из других городов и даже стран. http://www.compulenta.ru/2003/4/1/38713/"
};
reg_init(expr);
for(i=0; i<sizeof(str)/sizeof(char*);++i) {
reg_match(str[i]);
print_match(POS_TIME, "Время: ");
print_match(POS_TITLE, "Название статьи: ");
print_match(POS_ABSTRACT, "Аннотация: ");
print_match(POS_LINK, "Ссылка на статью: ");
}
reg_free();
return 0;
}
Подробная информация о списке рассылки Volgograd