Просмотр полной версии : А как вы пишите парсеры?
Привет! Интересуюсь темой насчет написания различных парсеров на Delphi. Хочу немного поднять опыт, поэтому провожу данный опрос. Какие функции используете вы при написании парсеров? Лично я все время использовал функции pos, delete, copy для получения необходимых мне данных. Сейчас немного задумался об эффективности и быстродействии данного метода; решил переходить на парсинг с помощью регулярных выражений.
Меня интересует, с помощью каких функций парсите вы? Считаете ли свой метод эффективным и быстродействующим? Пожалуйста, напишите, почему используете тот метод а не иной. Заранее благодарю всех, кто ответит.
Делфи не использую со времён университета.
ИМХО самое лучшее, что есть для обработки текста - perl с его регулярными выражениями, поддерживающимися на уровне самого языка.
Gray_Wolf
16.09.2009, 00:27
Эх, писал когдато парсер на VB, вот где была жесть :)
А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.
А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )
Gray_Wolf
16.09.2009, 00:45
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )
Что-то в этом конечно есть, но вот когда нужно парсить парочку многогиговых БД(часть из которых на Оракле, часть на М$ и часть на мускуле) то преимущество точно не на стороне перла :)
Перл хорош по части работы с текстом(м таким то названием :) ), но парсинг это не только обработка текста. Когда приходится использовать пару сотен потоков приходися задумыватся ещё и о инет канале(при чём не только на своей стороне, но и как этим парсером не повесить пару сайтов)
1. При чём здесь интернет-канал? Если речь о множественных запросах к удалённому серверу, то никакой язык программирования не "спасёт" - данные должны быть переданы в необходимом объёме, прежде чем их начнёт обрабатывать скрипт/программа.
2. Что именно вы хотите парсить в базах данных? Бинарные файлы самой базы MS/My SQL'ей или партиции Oracle? Или дамп БД?
парсинг это не только обработка текста это и есть обработка ТЕКСТА
_http://ru.wikipedia.org/wiki/Парсинг
PERL наше всио, просто, удобно. но это если парсить текст аля html xml, ну можно извратится и парсить и бинарные данные. А так уже практически в каждом языке программирования есть свои регулярные выражения. А если и нету то легко найти библеотеку например PCRE (http://ru.wikipedia.org/wiki/PCRE)
В основном парсеры я писал для веб, IRC ботов ну и делал сплоиты для некотоых сайтиков и писал я их на PERL т.к он очень подходит для подобных задач
ну и херню же вы несете... Пишу на дельфи, но нет бля, парсить буду на перле, извращаться и скрещивать их. Сильно, Мдоооооо.
для чего по вашему придумывались регулярные выражения?
W!z@rD, а кто сказал что мы пишем на делфи? мы и пишем на perl-е :) так что не надо вот тут...
А блять при чем тут перл вообще? Вроде как тема только про Дельфи...
Но, если честно, писать парсеры, боты и т. д. на Delphi и других языках, - вовсе не бредовая идея. Если умеешь, конечно. Меня интересует, какие функции вы чаще всего используете для этой работы?
В разных языках разные функции. Вы про какой спрашиваете? )
2 Chrome~, вот такие функции использую я
PERL
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
r = str.match(/(?:operate|operatewall)\s*\x28\s*\d+\s*,\s*(\d+)\s *,\s*(\d+)\s*,\s*[\x22\x27](\w+)[\x22\x27]/i);
С
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
$id=preg_replace("/\D/","",$_POST['id']);
тупая тема...
Вот модуль с процедурами для облегчения парсинга страниц:
Скачать. (http://borisenko.at.ua/load/2-1-0-23)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot