Thread Erste CSV-Zeile als Stringnamen verwenden (7 answers)
Opened by Steven at 2010-10-12 17:43

pq
 2010-10-12 21:32
#141851 #141851
User since
2003-08-04
12208 articles
Admin1
[Homepage]
user image
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: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread Erste CSV-Zeile als Stringnamen verwenden