Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   А как вы пишите парсеры? (https://forum.antichat.xyz/showthread.php?t=141697)

Chrome~ 15.09.2009 23:45

А как вы пишите парсеры?
 
Привет! Интересуюсь темой насчет написания различных парсеров на Delphi. Хочу немного поднять опыт, поэтому провожу данный опрос. Какие функции используете вы при написании парсеров? Лично я все время использовал функции pos, delete, copy для получения необходимых мне данных. Сейчас немного задумался об эффективности и быстродействии данного метода; решил переходить на парсинг с помощью регулярных выражений.

Меня интересует, с помощью каких функций парсите вы? Считаете ли свой метод эффективным и быстродействующим? Пожалуйста, напишите, почему используете тот метод а не иной. Заранее благодарю всех, кто ответит.

drim 15.09.2009 23:55

Делфи не использую со времён университета.
ИМХО самое лучшее, что есть для обработки текста - perl с его регулярными выражениями, поддерживающимися на уровне самого языка.

Gray_Wolf 16.09.2009 00:27

Эх, писал когдато парсер на VB, вот где была жесть :)
А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.

drim 16.09.2009 00:34

Цитата:

А так, для простых вещей подойдёт PHP или Перл, для всего остального существует СИ.
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )

Gray_Wolf 16.09.2009 00:45

Цитата:

Сообщение от drim
Сильно. Только вы пробовали когда-нибудь написать на Си программу для герации сложных, многоуровневых конфигов, элементы которых она должна брать с других конфигов и различных сетевых устройств, а также читать свой конфиг и знать что и кого "спрашивать"? А знаети ли вы что perl - вовсе не для "простых вещей", и вообще расшифровывается аббревиатура perl как "Практический язык для извлечения текстов и генерации отчетов (Рractical Extraction and Report Language)". Что-то в этом названии есть, вы не находите? )

Что-то в этом конечно есть, но вот когда нужно парсить парочку многогиговых БД(часть из которых на Оракле, часть на М$ и часть на мускуле) то преимущество точно не на стороне перла :)
Перл хорош по части работы с текстом(м таким то названием :) ), но парсинг это не только обработка текста. Когда приходится использовать пару сотен потоков приходися задумыватся ещё и о инет канале(при чём не только на своей стороне, но и как этим парсером не повесить пару сайтов)

drim 16.09.2009 01:17

1. При чём здесь интернет-канал? Если речь о множественных запросах к удалённому серверу, то никакой язык программирования не "спасёт" - данные должны быть переданы в необходимом объёме, прежде чем их начнёт обрабатывать скрипт/программа.
2. Что именно вы хотите парсить в базах данных? Бинарные файлы самой базы MS/My SQL'ей или партиции Oracle? Или дамп БД?
Цитата:

парсинг это не только обработка текста
это и есть обработка ТЕКСТА
_http://ru.wikipedia.org/wiki/Парсинг

Gar|k 16.09.2009 01:40

PERL наше всио, просто, удобно. но это если парсить текст аля html xml, ну можно извратится и парсить и бинарные данные. А так уже практически в каждом языке программирования есть свои регулярные выражения. А если и нету то легко найти библеотеку например PCRE

В основном парсеры я писал для веб, IRC ботов ну и делал сплоиты для некотоых сайтиков и писал я их на PERL т.к он очень подходит для подобных задач

W!z@rD 16.09.2009 06:55

ну и херню же вы несете... Пишу на дельфи, но нет бля, парсить буду на перле, извращаться и скрещивать их. Сильно, Мдоооооо.

для чего по вашему придумывались регулярные выражения?

Gar|k 16.09.2009 18:24

W!z@rD, а кто сказал что мы пишем на делфи? мы и пишем на perl-е :) так что не надо вот тут...

Tigger 16.09.2009 18:34

А блять при чем тут перл вообще? Вроде как тема только про Дельфи...

Chrome~ 16.09.2009 18:36

Но, если честно, писать парсеры, боты и т. д. на Delphi и других языках, - вовсе не бредовая идея. Если умеешь, конечно. Меня интересует, какие функции вы чаще всего используете для этой работы?

drim 16.09.2009 22:08

В разных языках разные функции. Вы про какой спрашиваете? )

Gar|k 16.09.2009 23:05

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\>\&nbsp\;\&nbsp\;\<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']);
тупая тема...

ange007 17.09.2009 23:38

Вот модуль с процедурами для облегчения парсинга страниц:
Скачать.


Время: 02:31