Thread primary key Duplikate entfernen ... suche Programmieridee
(18 answers)
Opened by tejste at 2014-07-23 12:46
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) |