Article View: pl.comp.lang.perl
Article #52090Re: problem logiczny ze skryptem
From: Maciej Misiak
Date: Mon, 06 Dec 2010 20:10
Date: Mon, 06 Dec 2010 20:10
82 lines
3531 bytes
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-mailReferences:
<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