parsovanie
Honza Pazdziora
adelton na informatics.muni.cz
Čtvrtek Červen 24 10:40:54 MEST 1999
On Thu, Jun 24, 1999 at 09:25:58AM +0200, Radovan Hrabcak wrote:
> Zdravim,
>
> Chcel by som poprosit o radu, chodi mi majlom urcity vypis v takomto
> formate:
>
> MENO ADRESA VEK EMAIL
>
> Oblast: Presov
>
> Jan Svec : Pribinova 3 : 23 : svec na niekde.sk
> Peter Cierny : Tatranska 91 : 45 : cierny na niekde.sk
>
> Oblast: Kosice
>
> Janko Hrasko : Hraskova 10 : 100 : hrasko na sk
> Jozo Procko : Hrnciarksa 5 : 30 : procko na sk
> .
> .
> .
> Oblast:
> atd...
>
> takychto oblasti(skupin) je viac, maximalne vzdy vsak 10, nie je
> problem porozdelovat ich pomocou funkcie split. Potrebujem vsak zistit nazov
> oblasti, kedze ich poradie aj pocet sa meni. Neviem ako potom zistit, obsah prveho riadka, a dalej aky sposobom rozdelit
> po riadkoch jednotlive zaznamy podla kategorii MENO, ADRESA, VEK a EMAIL do
> poli. Musim to robit tak ze oblast ulozim do suboru a budem ju po riadkoch
> nacitavat, alebo existuje aj elegantnejsi sposob?
Asi moc nechapu Vas dotaz a mam pocit, ze byste si mel nejdrive Vy
vyjasnit, co s temi daty vlastne potrebujete delat, ale:
#!/usr/bin/perl -w
use strict;
my %oblasti = ();
my $oblast;
while (<>) {
if (/^Oblast: ([^:]+)\s*$/) { # nova oblast
$oblast = $1;
}
my ($meno, $adresa, $vek, $email) = split /\s*:\s*/;
if (defined $oblast and defined $email) {
# testujeme poslednu polozku
$email =~ s/\s+$//; # orezeme biele miesta
$oblasti{$oblast}{$meno} = [ $adresa, $vek, $email ]
}
}
use Data::Dumper;
print Dumper \%oblasti; # vytiskneme ci inak zpracujeme
__END__
Vam vytvori hash jmen oblasti, kde kazda oblast je hash jmen,
obsahujicich triprvkove pole s adresou, vekem a emailem. Idea je ta,
ze pokud najdu radek se jmenem oblasti, tak jsem presel do dalsi
oblasti a poznamenam si jeji jmeno. A veskere datove radky, ktere
nasledne najdu, prihodim do aktualni oblasti.
Proc rikam, ze byste mel nejprve vyjasnit zadani: protoze neni jasne,
jestli vubec potrebujete vsechny udaje na konci zpracovani najednou,
nebo jestli chcete ten vstup treba prevest na vystup stylu
oblast--jmeno--email--vek
co s nimi vlastne chcete udelat; jestli je mozno se ridit pouze tim,
ze definice oblasti odpovida tomu prvnimu regularnimu vyrazu a datovy
radek splitu pres tri dvojtecky; zda ten hlaviskovy radek MENO ADRESA
... tam na neco je, jestli se podle neho napriklad maji ridit pozice
tech dalsich dat.
Parsovani je vzdycky o tom, ze dostavate nejak definovany vstup (vice
ci mene definovany a vice ci mene se menici) a chcete vyziskat nejakou
informaci. Je nutne predem vedet, co jste ochoten od toho vstupu
ocekavat (naprikald zde, pokud je datovy radek urcen tim,z e na nem
jsou tri dvojtecky, mohu se vykaslat na tu hlavicku, ktera sice
definuje zloupce, ale je v podstate na nic), a samozrejme, jaky chcete
vyrobit vystup.
------------------------------------------------------------------------
Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
make vmlinux.exe -- SGI Visual Workstation Howto
Any spam sent to my email will be rewarded by complaint to your ISP abuse
team and abuse teams of servers that relayed that message. It works.
Další informace o konferenci Perl