Thread Erste CSV-Zeile als Stringnamen verwenden
(7 answers)
Opened by Steven at 2010-10-12 17:43
ich schreib mal, wie ich das verstanden habe. schreib am besten ein kleines beispiel, damit man auch versteht, was du möchtest.
du hast eine csv-datei, die du einliest, mit folgenden feldern als überschrift: "name;vorname;jahr" du willst eine zweite csv-datei generieren, die aus der ersten die felder liest und die nur bestimmte felder der ersten enthalten soll, angegeben über einen string, z.b. "jahr;name". richtig? Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 use Text::CSV; my $csv = Text::CSV->new({sep_char => ";"}); open my $fh, "<", "csv1" or die $!; open my $out, ">", "csv2" or die $!; chomp(my $header1 = <$fh>); my $header2 = "jahr;name"; # überschrift der neuen datei my %headers1 = do { my $i = 0; map { $_ => $i++ } split /;/, $header1; }; my @headers2 = map { $headers1{$_} } split /;/, $header2; print $out "$header2\n"; # neue überschrift ausgeben while (my $line = <$fh>) { my $status = $csv->parse($line) or die $csv->error_diag; my @columns = $csv->fields(); $status = $csv->combine(@columns[@headers2]) or die $csv->error_diag; $line = $csv->string(); print $out "$line\n"; } Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wie frage ich & perlintro brian's Leitfaden für jedes Perl-Problem |