[linux] perl - substitúcia

DATARIX, s.r.o. datarix na datarix.sk
Pátek Listopad 23 12:27:07 CET 2007


OK, to by fungovalo, ale potrebujem spracovať viacero súborov s rôznou 
štruktúrou.
Naviac v niektorých súboroch sa počet polí približuje k 400!!!
Takže by ten parsovací string bol obrovský. Iný formát toho dumpu neviem 
získať.
Chcelo by to univerzálnejší spôsob... ???


Lubomir Host wrote:
> 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
>
>   




Další informace o konferenci linux