[Moscow.pm] Быстрый парсинг email-сообщений

Kaltashkin Eugene zhecka на gmail.com
Пт Фев 6 05:24:01 PST 2009


Walery Studennikov пишет:
> В общем, сплиттер header / body оптимизировали, это хорошо ;)
>
> Теперь наибольшим тормозом стал парсер mbox-ов.
> Сейчас используется такая конструкция:
>
>     while ($_ = <$fh>) {
> 	if (m/^(From .* \w\w\w \w\w\w (\d|\s)\d \d\d:\d\d:\d\d \d+)\n$/) {
> 	    _do_process_message( \$out, %param ) if $out;
> 	    $out = '';
> 	}
> 	else {
> 	    $out .= $_;
> 	}
>     }
>
> Можно ли придумать что-то быстрее для ПОТОКОВОГО парсинга?
>
>   
поменять например mbox в maildir.
По поводу From
всё проще.

undef $/;
open IN,"<mail.txt";
$head = <IN>;
close IN;
$head =~ s#\n(\t|\s+) ##g;
$/ = "\n";
foreach my $line (split /\n/,$head)
{
my ($name,$value) = split (/\:\s/ ,$line);
print $name,":::",$value,"\n";
}

Дальше всё обрабатывается decode_qt, decode_base64 + iconv по вкусу.


Подробная информация о списке рассылки Moscow-pm