[linux] perl - substitúcia
Lubomir Host
rajo na platon.sk
Pátek Listopad 23 00:17:42 CET 2007
On Thu, Nov 22, 2007 at 08:30:39PM +0100, DATARIX, s.r.o. wrote:
> zdravím,
>
> potrebujem perlom spracovať dump databázy, ktorý je v textovom tvare:
> jeden záznam je na jednom riadku
> hodnoty sú oddelené medzerou
> textové reťazce sú uzavreté do apostrofov
> príklad:
> 'text1' 6786 8 'text2' 2 56 75 0 '' 77 '' '' 'textN' ...
>
> mám hotový kus programu, ktorý otvorí a načítava riadky do premennej $line
> riadok potom rozdelím na jednotlivé polia:
> @splitted_line = split(/ /,$line);
>
> Problém je, že dopredu neviem vylúčiť, či nejaký text nebude obsahovať
> medzeru.
> Jedna možnosť je prejsť riadok znak po znaku a sparsovať to "ručne".
> To sa mi ale nepozdáva.
A vies s istotou vylucit, ze textove pole neobsahuje apostrof? Ak ano,
tak potom to naparsovat takto:
use Data::Dumper;
while (my $line = <STDIN>) {
chomp $line;
my @splitted_line = @{[ $line =~ m/^'([^']*)'\s(\d+)\s(\d+) .... pokracovat podla vzoru .... $/ ]};
print Dumper(\@splitted_line);
}
> Vie niekto poradiť, ako korektne a elegantne rozdeliť ten riadok na
> polia napr. pomocou regexp?
> Prípadne ako cez regexp nahradiť medzery v textoch napr. podtržníkom?
> Alebo iným spôsobom?
Kazdopadne by som odporucal ziskat dump v rozumnejsom formate. Napr. vo
forme XML a rozparsovat to cez modul XML::Simple.
rajo
--
,''`. Lubomir Host 'rajo' <rajo AT platon.sk> ICQ #: 257322664
: :' : Jabber: rajo AT jabber.platon.sk VoIP: callto://rajo207
`. `' WWW: http://rajo.platon.sk/ Platon Group: http://platon.sk/
`- GnuPG key: DC0C C7EA 55C8 B089 C41D 944A F251 A93A 2361 A82F
Další informace o konferenci linux