Привет! Интересуюсь темой насчет написания различных парсеров на Delphi. Хочу немного поднять опыт, поэтому провожу данный опрос. Какие функции используете вы при написании парсеров? Лично я все время использовал функции pos, delete, copy для получения необходимых мне данных. Сейчас немного задумался об эффективности и быстродействии данного метода; решил переходить на парсинг с помощью регулярных выражений. Меня интересует, с помощью каких функций парсите вы? Считаете ли свой метод эффективным и быстродействующим? Пожалуйста, напишите, почему используете тот метод а не иной. Заранее благодарю всех, кто ответит.
Делфи не использую со времён университета. ИМХО самое лучшее, что есть для обработки текста - perl с его регулярными выражениями, поддерживающимися на уровне самого языка.
Эх, писал когдато парсер на VB, вот где была жесть А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )
Что-то в этом конечно есть, но вот когда нужно парсить парочку многогиговых БД(часть из которых на Оракле, часть на М$ и часть на мускуле) то преимущество точно не на стороне перла Перл хорош по части работы с текстом(м таким то названием ), но парсинг это не только обработка текста. Когда приходится использовать пару сотен потоков приходися задумыватся ещё и о инет канале(при чём не только на своей стороне, но и как этим парсером не повесить пару сайтов)
1. При чём здесь интернет-канал? Если речь о множественных запросах к удалённому серверу, то никакой язык программирования не "спасёт" - данные должны быть переданы в необходимом объёме, прежде чем их начнёт обрабатывать скрипт/программа. 2. Что именно вы хотите парсить в базах данных? Бинарные файлы самой базы MS/My SQL'ей или партиции Oracle? Или дамп БД? это и есть обработка ТЕКСТА _http://ru.wikipedia.org/wiki/Парсинг
PERL наше всио, просто, удобно. но это если парсить текст аля html xml, ну можно извратится и парсить и бинарные данные. А так уже практически в каждом языке программирования есть свои регулярные выражения. А если и нету то легко найти библеотеку например PCRE В основном парсеры я писал для веб, IRC ботов ну и делал сплоиты для некотоых сайтиков и писал я их на PERL т.к он очень подходит для подобных задач
ну и херню же вы несете... Пишу на дельфи, но нет бля, парсить буду на перле, извращаться и скрещивать их. Сильно, Мдоооооо. для чего по вашему придумывались регулярные выражения?
Но, если честно, писать парсеры, боты и т. д. на Delphi и других языках, - вовсе не бредовая идея. Если умеешь, конечно. Меня интересует, какие функции вы чаще всего используете для этой работы?
2 Chrome~, вот такие функции использую я PERL Code: while($s=<$socket>) { $olds=$next; $all=0; if($s=~/\<td align=\"left\" valign=\"top\" class=\"decorBodyCell\"\>/){$on=1;next;} if($s=~/\<\/td\>/){$on=0;next;} if($s=~/\<a href=\"\.\.\/\"\>(.*)\<\/a\>\ \;\ \;\<a href=\"(.*)\">Вперед/){$all=1;$next=$2;next;} if($s=~/\<\/p\>\<\/center\>/){next;} if($s=~/\<p\>(<big>){3}\<strong\>(.*)\<\/strong\>(\<\/big\>){3}\<\/p\>/){$name_stat=$2;next;} if($s=~/\<p\>\<big\>\<strong\>(.*)\<\/strong\>\<\/big\>\<\/p\>/){$autor_stat=$1;next;} if($s=~/\<p\>\<strong\>(.*)\<\/strong\><\/p\>/){next;} if($s=~/\<p\>\<img/){next;} if($s=~/\<p class=\"textBody\">\<br\>/){next;} if($s=~/\<hr/){next;} if($s=~/\s\s\s\<\/p\>/){next;} if($s=~/\<p\>\((.*)\)\<\/p\>/) { $mail_autor=$1; if(!$mail_autor=~/[a-z_0-9-]@([a-z_0-9-]+\.)/){$mail_autor='';} next; } #if($olds eq $next){last;} if($on==1){$statya.=$s;} } $statya.="|||"; # obozn page } JS Code: r = str.match(/(?:operate|operatewall)\s*\x28\s*\d+\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*[\x22\x27](\w+)[\x22\x27]/i); С Code: if((re=pcre_compile ((char *) pattern, PCRE_CASELESS|PCRE_MULTILINE, &error, &erroffset, NULL))==NULL){ printf("Error: %s\nSymbol N%i\nPattern:%s\n",error,erroffset,pattern); getchar(); exit(1); } else { if((pairs=pcre_exec(re,NULL,str,4,0,PCRE_NOTEMPTY,vector,vecsize))<0){ printf("Error! num: %i\n",pairs);} .... PHP Code: $id=preg_replace("/\D/","",$_POST['id']); тупая тема...