Thread primary key Duplikate entfernen ... suche Programmieridee (18 answers)
Opened by tejste at 2014-07-23 12:46

payx
 2014-07-23 14:03
#176560 #176560
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo tejste,

hier ein Beispiel zum Weiterbauen:
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
#!/usr/bin/perl

use strict;
use warnings;

my %hash;

# Daten zeilenweise aus Filehandle (hier: DATA) einlesen
while (my $row = <DATA>) {
    # Newline entfernen
    chomp $row;
    # Zeile in Array speichern
    my @f = split /;/, $row;
    # Zeile verwerfen, wenn dieser Schlüssel schon existiert
    next if $hash{$f[0]}->{$f[3]}->{$f[4]};
    # Zeile als ArrayRef in verschachteltem Hash speichern
    $hash{$f[0]}->{$f[3]}->{$f[4]} = \@f;
}

# Den verschachtelten Hash in einer verschachtelten Schleife auslesen
for my $f0 (sort keys %hash) {
    for my $f3 (sort keys %{$hash{$f0}}) {
        for my $f4 (sort keys %{$hash{$f0}->{$f3}}) {
            # Das ArrayRef als Array zwischenspeichern
            my @f = @{$hash{$f0}->{$f3}->{$f4}};
            # SQL-Statement generieren und ausgeben.
            my $sql = "INSERT into FOO (BAR, BAZ, BAF, BAM, BAX, BAL) values (" . join(', ', @f) . ");";
            print "$sql\n";
        }
    }
}

__DATA__
XXC;0.0090;0.0290;07/18/2014;03:36:35;IN
XXC;0.0040;0.0240;07/18/2014;03:50:48;IN
XXC;0.0020;0.0220;07/18/2014;03:50:48;IN

HTH
Grüße
payx

PS: Du wolltest es eigentlich in einem Aufwasch haben, gell?
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
#!/usr/bin/perl

use strict;
use warnings;

my %hash;

# Daten zeilenweise aus Filehandle (hier: DATA) einlesen
while (my $row = <DATA>) {
    # Newline entfernen
    chomp $row;
    # Zeile in Array speichern
    my @f = split /;/, $row;
    # Zeile verwerfen, wenn dieser Schlüssel schon existiert
    next if $hash{$f[0]}->{$f[3]}->{$f[4]};
    # Schlüssel in verschachteltem Hash speichern
    $hash{$f[0]}->{$f[3]}->{$f[4]} = 1;
    # SQL-Statement generieren und ausgeben.
    my $sql = "INSERT into FOO (BAR, BAZ, BAF, BAM, BAX, BAL) values (" . join(', ', @f) . ");";
    print "$sql\n";
}

__DATA__
XXC;0.0090;0.0290;07/18/2014;03:36:35;IN
XXC;0.0040;0.0240;07/18/2014;03:50:48;IN
XXC;0.0020;0.0220;07/18/2014;03:50:48;IN

Das ist natürlich einfacher.

Editiert von payx: PS
Last edited: 2014-07-23 14:16:00 +0200 (CEST)

View full thread primary key Duplikate entfernen ... suche Programmieridee