Thread Begutachtung Script zum CSV vergleich
(2 answers)
Opened by gnude at 2011-10-07 12:01
Mir ist gerade diese Zeile aufgefallen: if ($ergebnis == "1") {
Das Doppel-Gleich ist für den Vergleich von Zahlen, nicht für Zeichenketten. Die 1 in den Anführungszeichen ist aber eine Zeichenkette. Eigentlich müsste da eine Warnung auftauchen. Entweder nimmst du eine Zahl (1), dann kannst du if ($ergebnis == 1) { schreiben ($ergebnis muss dann auch eine Zahl sein), oder du verwendest eq, das ist der Vergleichsoperator für Zeichenketten: if ("$ergebnis" eq "1") { Ordentlich eingerückt liest sich sowas übrigens immer besser ;-) 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #!/usr/bin/perl use strict; use warnings; use Text::CSV; use Data::Dumper; print "CSV Vergleich vom 07.10.2011 ver 0.0.1\n"; # Dieser Teil liest die Hauptdatei Zeilenweise ein, extrahiert die Kundennummer # und übergibt sie zur Prüfung an die sub nummerntest # my $csv = Text::CSV->new ( { binary => 1 , sep_char => ";" } ) or die "File not found: ".Text::CSV->error_diag (); open my $fh, "<:encoding(ISO-8859-15)", "xt_customers.txt" or die "xt_customers.txt $!"; while ( my $row = $csv->getline ( $fh ) ) { my $ergebnis = nummerntest ("$row->[0]"); if ($ergebnis == "1") { # ??? } else { #print $row->[0]; #my $test = join (';',$row->[0],$row->[1],$row->[2],$row->[3]); print join (';',$row->[0],$row->[1],$row->[2],$row->[3],$row->[4],$row->[5],$row->[6],$row->[7],$row->[8],$row->[9],$row->[10],$row->[11],$row->[12],$row->[13],$row->[14],$row->[15],$row->[16],$row->[17]); print " -> aus der TXT Datei"; } print "\n"; } $csv->eof or $csv->error_diag(); close $fh; =head1 SUBS =head2 nummerntest( $nummer ) Dieses Sub bekommt die Kundennummer übergeben und schaut ob es sie schon gibt. Wenn ja werden die Daten aus der .CSV Ausgegeben =cut sub nummerntest { my $nummer = shift; my $csv2 = Text::CSV->new ( { binary => 1 , sep_char => ";" } ) or die "File not found: ".Text::CSV->error_diag (); open my $fh2, "<:encoding(ISO-8859-15)", "xt_customers.csv" or die "xt_customers.csv $!"; while ( my $row2 = $csv2->getline ( $fh2 ) ) { if ($nummer == $row2->[0]) { print join (';',$row2->[0],$row2->[1],$row2->[2],$row2->[3],$row2->[4],$row2->[5],$row2->[6],$row2->[7],$row2->[8],$row2->[9],$row2->[10],$row2->[11],$row2->[12],$row2->[13],$row2->[14],$row2->[15],$row2->[16],$row2->[17]) ; print " -> aus der CSV Datei"; return("1"); } else { # ??? } } return("0"); } # /nummerntest http://www.intergastro-service.de (mein erstes CMS :) )
|