Portál AbcLinuxu, 13. května 2025 22:17

Dotaz: Perl parser cvs do sql

27.2.2009 17:48 Ivan
Perl parser cvs do sql
Přečteno: 521×
Odpovědět | Admin

 

Zdavim, neviete mi niekto pomoc surne zhanam nejaky Perl Parser nasiel som iba PHP parser ktory mi je v mojom pripade zbytocny uz som bezradny... Ide hlavne  aby dokazal velke cvs-ko vyparsovat do sql-ka co je samozrejme...

priklad subor cvs obsahuje: data.cvs

ID|MENO|VYSKA|VAHA
1;janko;180;75
2;ferko;195;90

a potrebujem to dostat do tvaru

insert into zoznam values('1','janko','180','75' );
insert into zoznam values('2','ferko','195','90' );

Ale CVS-kovy subor ma asi 8MB.

Velmi pekne dakujem.

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

27.2.2009 18:57 tom
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemyslite spis csv - comma separated values? Jinak parser mi prijde jako kanon na vrabce, split a join vam nestaci? perl -lnaF\; -e "print \"insert into zoznam values('\", join(\"','\",@F), \"')\\;\";"
28.2.2009 05:36 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
"Někdy to opravdu nestčí ;-)"; že...
28.2.2009 12:19 tom
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
V tom formatu se maji matchovat uvozovky nebo narazite na neco jineho? Ja myslel, ze oddelovaci znak se vzdy voli tak, aby se nevyskytoval v datech.
28.2.2009 12:57 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Vždy právě ne, a zrovna u CSV to neplatí.
28.2.2009 14:19 tom
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Tak pak staci jen trochu upravit, podle ceho se to rozseka: perl -na -e 's/(?:"(.*?)"|(.*?))[;\n]/$1$2\000/g; print "insert into zoznam values'"('\", join(\"','\", split /\\000/), \"'"');\n";'
28.2.2009 16:45 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
"Myslíte?"";-)"""
27.2.2009 19:00 myšák | skóre: 26 | blog: EmentuX | Ostrava
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Odpovědět | | Sbalit | Link | Blokovat | Admin

A můžu se zeptat proč tahat na něco takového PERL parser, když na to stačí např. AWK?

#!/usr/bin/awk -f
BEGIN { FS=";" };
{
printf("insert into zoznam values('%s','%s','%s','%s');\n", $1, $2, $3, $4);
}
Je nesmírně těžké být idiotem, konkurence je obrovská...
28.2.2009 05:35 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
A data

echo; ahoj; "světe; exit"; "vám to rozparsuje jistě také správně, že ;)"
28.2.2009 16:03 myšák | skóre: 26 | blog: EmentuX | Ostrava
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
To samozřejmě ne ... nicméně pro výše uvedené zadání to bohatě stačí ;-)
Je nesmírně těžké být idiotem, konkurence je obrovská...
28.2.2009 16:47 Ash | skóre: 53
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Jasně, promiň, četl jsem jen první odstavec zadání :D I když ty "janko,ferko" by mohly sváděly k domněnce že to může být jen ukázkové zjednodušení.
27.2.2009 19:47 maxik
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkuste priste trochu hledat! Uplne, ale NAPROSTO stejny problem a taky pomoci perlu se resi tady:

http://www.linuxsoft.cz/article.php?id_article=1061
28.2.2009 16:53 Ivan
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nasiel som len nieco taketo: ale odeluje mi to len slova odelovane ciarkou "," skusal som to nejako upravit ale je to marne nevedeli by ste s tym niekto pohnut? aby my to bralo oddelene data bodko-ciarkou ";"?

#!/usr/bin/perl

# PERL MODULE
use Text::CSV::Simple;
   
# script

my $tplSQL = "INSERT INTO country (short_code, name) VALUES (\"%s\",\"%s\");\n";
my $csvFile="codes.csv";

my $parser = Text::CSV::Simple->new();
my @data = $parser->read_file($csvFile);

foreach(@data) {
        printf $tplSQL, @$_[1], @$_[2];
};

Jendа avatar 28.2.2009 18:26 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Udělat z toho comma separated values? tr ";" ","
28.2.2009 18:30 Ivan
Rozbalit Rozbalit vše Re: Perl parser cvs do sql

Do perlu sa velmi nerozumiem nemohol by si to uviest na priklade?

Jendа avatar 28.2.2009 18:37 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
To není perl - cat tvuj_soubor | tr ";" "," > soubor.csv. A ten perlový skript pustíš až na ten soubor.csv.
28.2.2009 19:15 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: Perl parser cvs do sql
Já bych spíš šel do dokumentace, a udělal my $parser = Text::CSV::Simple->new({ sep_char => ';' });. Myslím, že to bude o něco spolehlivější ;-)
Ještě na tom nejsem tak špatně, abych četl Viewegha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.