[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