Article View: pl.comp.lang.perl
Article #39774Re: regex w wielu liniach, mam problem
From: Grzegorz Szyszlo
Date: Mon, 18 Oct 2004 10:16
Date: Mon, 18 Oct 2004 10:16
52 lines
3483 bytes
3483 bytes
Grzegorz Szyszlo wrote:
> Michal Jankowski wrote:
Dzieki wszystkim za szczere checi, a tobie Michale za rzeczowa podpowiedz :)
Chodzilo o wyciaganie logow z programu Tapeware. Oto co zmajstrowalem.
bede musial to wyrazenie jeszcze dopracowac stosujac (?: ... )
w celu pomijania fragmentow, ktore nie wystepuja w niektorych logach,
a szczegolnie tych, ktore pokazuja archiwa niewykonane lub nie w pelni
wykonane. oto wyrazonko:
open PLIK,"log.programu.tapeware 6.30 lub 7.00" or return (); #blad otwarcia
sysread PLIK,$line,16384;
close PLIK;
$line=~s/\x0D\x0A/\x0A/gm; #skonwertuj \n do konwencji unix
$line=~/ ^Job \s ([^\n]+) $ \n
.*? ^\s\s Job\ Type \s+ : \s ([^\n]+) $ \n
.*? ^\s\s Backup\ mode \s+ : \s ([^\n]+) $ \n
.*? ^\s\s Job\ Start\ Time \s+ : \s ([^\n]+) $ \n
.*? ^\s+ : \s+ Media \s+ : \s ([^\n]+) $ \n
.*? ^\s+ Backup\ Last\ Objects? \s+ : \s+ End \s+ ([^\n]+) $ \n
.*? ^\s+ Job\ End\ Time \s+ : \s ([^\n]+) $ \n
.*? ^\s\s Completed\ Size \s+ : \s ([\d]+) [^\n]* $ \n
.*? ^\s\s Failed\ Objects \s+ : \s ([^\n]+) $ \n
.*? ^\s\s (Job\ Completed\ Succ?essfully) [^\n]* $ \n
/xsm;
w $1 do $10 sa poszukiwane przeze mnie wartosci.
w zasadzie kazda z linii tego wyrazenia mozna otoczyc (?: ... ) ,
ale jeszcze tego nie sprawdzalem czy zadziala tak jak chce, ale
powinno pojsc.
btw. zastanawialem sie jak oznaczyc koniec linii, bo jak robilem $\n
to zle mi to interpretowal. wstawiajac spacje, wymuszalem prawidlowe
znaczenie $ , ale jest to mozliwe tylko przy opcji /x . bez tej
opcji nie wiem jak osiagnac zamierzony efekt. \$ z oczywistych
wzgledow odpada :) (to jest dopasowanie do znaku $)
Btw. niech nikogo nie dziwia konstrukcje typu: "Job\ Type" .
Chodzi o to, ze przy opcji /x , spacja jest traktowana jakby w zasadzie
jej nie bylo, slashowanie pozwala przywrocic jej pierwotne znaczenie.
nie wyczytalem tego w zadnym docu, posluzylem sie ta konstrukcja
"na czuja" i poszlo. czyzby cos nieudokumentowanego? :)))
aha. konstrukcja typu .*? z opcja /s na kolana co prawda
nie powala, ale w moim przypadku jest to wystarczajaco wydajne,
i osiagam zamierzony rezultat, czyli pominiecie dowolnej partii
logu, bez ogladania sie na konce linii. w razie czego
zawsze mozna zastosowac [^\n]* jesli konce linii jednak musza
miec znaczenie :)
znik.
Technical Details
Message-ID:
<cl056v$uj6$1@news.lublin.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!news.lublin.pl!not-for-mailReferences:
<ckvngq$hal$1@news.lublin.pl> <2n3c0c4fsk.fsf@ccfs1.fuw.edu.pl> <ckvv3q$ol3$1@news.lublin.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!lublin.pl!news.lublin.pl!not-for-mail From: Grzegorz Szyszlo <znik@wbc.lublin.pl> Newsgroups: pl.comp.lang.perl Subject: Re: regex w wielu liniach, mam problem Date: Mon, 18 Oct 2004 12:16:17 +0200 Organization: lubman Lines: 53 Message-ID: <cl056v$uj6$1@news.lublin.pl> References: <ckvngq$hal$1@news.lublin.pl> <2n3c0c4fsk.fsf@ccfs1.fuw.edu.pl> <ckvv3q$ol3$1@news.lublin.pl> NNTP-Posting-Host: user.wbc.lublin.pl Mime-Version: 1.0 X-Trace: news.lublin.pl 1098094624 31334 212.182.104.10 (18 Oct 2004 10:17:04 GMT) X-Complaints-To: abuse@news.lublin.pl NNTP-Posting-Date: Mon, 18 Oct 2004 10:17:04 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030721 Debian/1.4-1.nobse.2 X-Accept-Language: pl, en-us In-Reply-To: <ckvv3q$ol3$1@news.lublin.pl> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit