Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

По алгоритму поиска

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Андрeй



Зарегистрирован: 13.08.2007
Сообщения: 4

СообщениеДобавлено: Вт Авг 14 2007 08:22    Заголовок сообщения: По алгоритму поиска Ответить с цитатой

Приветствую всех, требуется написать пограмму получающую содержимое некоторых тегов в html файле.
Имеется большой файл в нем теги А Б С повторяются последовательно. Нужно получить их значение, файл можно читать в буфер, потом искать теги в буфере, но что делать если искомое не вхлдит в буфер? я решил, что можно склеить n и n+1 буферы и поискать в них, но как-то это не универсально, юзаю регулярные выражения и c++.

Соответсвенно нужно какое-то другое решение. Подскажите пожалусто.

int main()
{
char *patternMailto="mailto:(.+?)>";
char *patternPhoneInternal=">([1-9])-([0-9][0-9][0-9])<";
regmatch_t p[2]; /* массив, в который будут заноситься результаты поиска */
regex_t regMailto, regPhoneInternal; /* переменная, для хранения преобразованного шаблона */
int i,j;
fprintf(stdout,"HTMLparser 0.01\n");
if(regcomp(&regMailto,patternMailto,0)) /* если возвращаемое значение не 0 - ошибка */
{
printf("Failed to compile regular expression!\n");
exit(1);
}

if(regcomp(&regPhoneInternal,patternPhoneInternal,0)) /* если возвращаемое значение не 0 - ошибка */
{
printf("Failed to compile regular expression!\n");
exit(1);
}


int fd,rd,found;
unsigned int ii=0;
if((fd=open("/home/andrey_polyakov/1.html",O_RDONLY)) == -1)
{
fprintf(stderr,"Open failed:%s (errno=%d)\n",strerror(errno),errno);
exit(EXIT_FAILURE);
}
int bufferSize=128;
char *any, bufferRead[bufferSize], buffer0[bufferSize], buffer[bufferSize], buffer_all[bufferSize*2], tmp[]="email[", *letter;
char *b,bb[]=" ";
char aa[]="]";
//bb[1]="\0";
int ee=0;
bool step, switchBuffers;
switchBuffers=false;
step=true;
while ((rd=read(fd,bufferRead,bufferSize))>0)
{

memset (buffer_all,' ',bufferSize);
strncpy(buffer,bufferRead,bufferSize);
if (step)
{
if((rd=read(fd,buffer0,bufferSize))!=0)
{
memset (buffer0,' ',bufferSize);
}
if(rd==-1)
{
fprintf(stderr,"Read failed:%s (errno=%d)\n",strerror(errno),errno);
exit(EXIT_FAILURE);
}
strncpy(buffer,buffer0,bufferSize);
strncpy(buffer0,bufferRead,bufferSize);
//printf("buffer_all");
step=not step;
}


strncpy(buffer_all,buffer0,bufferSize);
strncpy(buffer_all+bufferSize,buffer,bufferSize);

//printf(buffer_all);
if(!regexec(&regMailto,buffer_all,2,p,0)) /* если возвращаемое значение не 0 - значит ничего не найдено */
{
printf("содержимое тега: ");
for(j=p[1].rm_so;j<p[1].rm_eo;j++)
putchar(buffer_all[j]);
putchar('\n');
}

if(!regexec(&regPhoneInternal,buffer_all,2,p,0))
{
printf(" : ");
for(j=p[0].rm_so;j<p[0].rm_eo;j++)
putchar(buffer_all[j]);
putchar('\n');
}
//fprintf(stdout,"\n");
//memset (buffer0,' ',bufferSize);
strncpy(buffer0,buffer,bufferSize);
//memset (buffer,' ',bufferSize);
}
if(rd==-1)
{
fprintf(stderr,"Read failed:%s (errno=%d)\n",strerror(errno),errno);
exit(EXIT_FAILURE);
}

return 0;
}
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пн Авг 27 2007 19:37    Заголовок сообщения: Ответить с цитатой

Используй библиотеку MSHTML, и не парься! Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрeй



Зарегистрирован: 13.08.2007
Сообщения: 4

СообщениеДобавлено: Вт Авг 28 2007 05:04    Заголовок сообщения: Ответить с цитатой

Я за кроссплатформенное программирование... мс не канает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...