Thread Zusammenführung von .csv files klappt manchmal nicht (28 answers)
Opened by vionig at 2017-09-16 16:05

hlubenow
 2017-09-18 19:09
#187433 #187433
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
Also, wenn Dein Code teilweise das gemacht haben sollte, was Du beschreibst, dann wohl eher aus Zufall.

Ich verstehe Dich so, daß Du in der ersten Datei einen Zeitwert hast (z.B. 1170911), und dann in der zweiten, dritten, ... n-ten Datei gucken willst, ob da auch eine Zeile mit diesem Zeitwert ist, und wenn ja, willst Du all diese Zeilen zu einer einzigen Zeile verschmelzen, wobei die Felder 1, 2 und 3 (die Zeit ist in Feld 0) addiert werden sollen. Richtig?

In Perl macht man das am einfachsten mit einem Hash, denke ich.

Beispiel:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/perl

use warnings;
use strict;

my $fieldsep = ",";

sub addLine {
    my $rline = shift;
    my $line = shift;
    my @r = split($fieldsep, $rline);
    my @l = split($fieldsep, $line);
    $r[0] += $l[1];
    $r[1] += $l[2];
    $r[2] += $l[3];
    return join($fieldsep, @r);
}

my %results = ();

my $dir = './FXE';
foreach my $fp (glob("$dir/*")) {
    open my $fh, "<:encoding(utf8)", $fp or die "can't open $!";
    while (my $line = <$fh>) {   
        chomp $line;
        my @fields = split($fieldsep, $line);
        my $date = $fields[0];
        if($date < 1101227) {
            next;
        }
        if (exists($results{$date})) {
            $results{$date} = addLine($results{$date}, $line);
        } else {
            my @f = @fields;
            shift(@f);
            $results{$date} = join($fieldsep, @f);
        }
    }
    close $fh or die "can't close $!";
}
 
foreach my $i (sort(keys(%results))) {
    print "$i,$results{$i}\n";
}

View full thread Zusammenführung von .csv files klappt manchmal nicht