Portál AbcLinuxu, 13. května 2025 22:17
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.
perl -lnaF\; -e "print \"insert into zoznam values('\", join(\"','\",@F), \"')\\;\";"
"Někdy to opravdu nestčí"; že...
perl -na -e 's/(?:"(.*?)"|(.*?))[;\n]/$1$2\000/g; print "insert into zoznam values'"('\", join(\"','\", split /\\000/), \"'"');\n";'
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); }
echo; ahoj; "světe; exit"; "vám to rozparsuje jistě také správně, že ;)"
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];
};
tr ";" ","
Do perlu sa velmi nerozumiem nemohol by si to uviest na priklade?
my $parser = Text::CSV::Simple->new({ sep_char => ';' });
. Myslím, že to bude o něco spolehlivější
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.