🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.perl
Article #52090

Re: problem logiczny ze skryptem

#52090
From: Maciej Misiak
Date: Mon, 06 Dec 2010 20:10
82 lines
3531 bytes
Kilka uwag:
1. nie dostrzegam sensu dwa razy otwierania i czytania pliku do 
"$dir/maillog.$i". Jeśli tylko z niego czytasz i potem wykorzystujesz te 
dane na zasadzie read-only to wystarczy wczytać raz i skorzystać dwa razy.
2. dla lepszej czytelności można trochę pozmieniać kolejność żeby lepiej 
widoczne były bloki: otwórz plik, przeczytaj, zamknij plik
3. znaczenia pętli for ($i=309;$i>=31;$i--) nie rozumiem, więc pozostaje 
tylko przypuszczać: czytanie pliku "$dir/maillog.$i" wyciągnij przed tą 
pętlę. Po co 309-31 razy go wczytujesz? I x2, bo dla dwóch skrzynek?
4. w regexpie [a-zA-Z0-9_] możesz zamienić na \w. Generalnie do 
sprawdzania czy string jest emailem lepiej użyj jakiegoś gotowego 
Regexp::Common czy czegoś podobnego.
5. jeżeli /([0-9:]{3}[0-9:]{3}[0-9]{2})/ to jest regexp sprawdzający czy 
string jest godziną, to definitywnie wypadałoby zamienić na coś, co nie 
dopasuje '::::::01' ani '00000000'... Np. /(\d{2}:\d{2}:\d{2})/
6. if(w1) { if(w2) { } } lepiej zapisać jako if (w1 && w2) { }


Więc jakoś tak (bez testowania)

#!/usr/bin/perl

$dir = '/usr/skrypty/maillog/boborowa/logi';

#`/bin/rm -f $dir/wynik/*`;
#31 maillog
my %skrzynki = (
                     'biuro@xxx.pl' => 1,
                     'marketing@xxx.pl'        => 1,
                 );

open(UCHWYT, "$dir/maillog.$i");
@UCHWYT = <UCHWYT>;
close UCHWYT;

foreach my $sprawdz (keys %skrzynki)
{
	open ZAPISZ, "+>>$dir/wynik/$sprawdz";
	
	for ($i=309;$i>=31;$i--)
	{
		my @Q;
		my %line;
		
		for (@UCHWYT)
		{
		#sprawdzam czy wpis jest emailem jesli tak to wchodzi dalej i sprawdza 
w haszu czy jest email jesli tak obrabia go dalej i tworzy linie
		    if(/([\w\.-]*\w@[\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z])/
				&& $skrzynki{$1}
				&& $sprawdz eq $1)
		    {
		            if (/([0-9A-Z]{10})/)
		            	{ push @Q = $1 }
		            if (/(\d{2}:\d{2}:\d{2})/)
			            { $line{$_} = $1 }
		            $queue_id = "";
		    }
		}
		
		# tu robie grep jeszcze raz dla maillog z konkretym ID queue i 
dopisuje do lini
		for my $id(@Q)
		{
		    for (grep /$id/, @UCHWYT)
		    {
		        print;
		        if (/(\d{2}:\d{2}:\d{2})/)
		        	{ $line{$_} = $1 }
		    }
		}
		
		# wyswietlam posortowane wpisy na podstawie godziny
		# tu pojawia sie problem bo jak sortuje po godzinach to
		# gubi sie kolejnosc wpisow
		print ZAPISZ sort keys %line;
	}
	close ZAPISZ;
}

-- 
grizzley
Technical Details
Message-ID: <idjfvc$ksa$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
References: <idbb3m$dpe$1@inews.gazeta.pl> <idghvm$7d6$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!.POSTED!not-for-mail
From: Maciej Misiak <grizzley@poczta.onet.pl>
Newsgroups: pl.comp.lang.perl
Subject: Re: problem logiczny ze skryptem
Date: Mon, 06 Dec 2010 21:10:18 +0100
Organization: http://onet.pl
Lines: 82
Message-ID: <idjfvc$ksa$1@news.onet.pl>
References: <idbb3m$dpe$1@inews.gazeta.pl> <idghvm$7d6$1@inews.gazeta.pl>
NNTP-Posting-Host: ip-62-69-199-251.globalconnect.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1291666220 21386 62.69.199.251 (6 Dec 2010 20:10:20 GMT)
X-Complaints-To: niusy@onet.pl
NNTP-Posting-Date: Mon, 6 Dec 2010 20:10:20 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.13) Gecko/20101129 Thunderbird/3.1.7 ThunderBrowse/3.3.4
In-Reply-To: <idghvm$7d6$1@inews.gazeta.pl>
X-Antivirus: avast! (VPS 101206-0, 2010-12-06), Outbound message
X-Antivirus-Status: Clean
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit