
 |

| Community » Perl: Allgemeines Forum |
|
Neuling braucht Hilfe
|
Seitenanfang |
Hi, bin Neuling auf dem Gebiet von PERL. Ich versuche eine SOLL-Tabelle mit einer IST-Tabelle zuvergleichen(aktuell nur eine Spalte davon). Die ersten 8 Zeilen sind identisch(also kein Problem). Endet mit dem Zahlenwert 001241, zweige dann auf eine elsif ($code1 =~ $code) der laeuft auch wunderbar durch und endet mit den Zeilen:SOLL 001242 EWSD 0012425 SOLL 001242 EWSD 0012426 SOLL 001242 EWSD 0012427 SOLL 001242 EWSD 0012428 SOLL 001242 EWSD 0012429 Jetzt moechte ich aber das das Script dann weiter macht und zwar mit dem naechsten Wert in der SOLL-Tabelle(001243, 001244, 001245).Der waere wieder in beiden Tabellen der gleiche. Der nachfolgende Wert 001246 ist in der IST-Tabelle wieder laenger in der Stelligkeit. DAs geht dann immer so weiter. DAs Script sieht momentan so aus: Nicht erschrecken das es etwas umstaendlich aus sieht, aber momentan kann ich es nicht besser. open (EWSD, "cut -f1,2,3,4 -d\"\,\" EWSD.txt | ") ; open (SOLL, "cut -f1,2,3 -d\"\,\" SOLL.txt | ") ; while (<EWSD>) { chomp() ; $_ =~ s/://g; ($code, $orig2, $zono, $billing) = split /\,/ ; $code =~ s/CODE=//; $orig2 =~ s/ORIG2=//; $orig2 =~ s/-4//; $orig2 =~ s/-5//; $orig2 =~ s/-6//; $zono =~ s/ZONO=//; while (<SOLL>){ chomp() ; $_ =~ s/"//g; ($code1, $zono1, $country) = split /\,/ ; if ($code1 == $code) { print "PERFEKT" , " ",$code1, " ", $code, "\n" ; last; } elsif ($code1 =~ $code){ print "SOLL", " ", $code1, " EWSD", " ", $code, " ", "ORIG2 ", $orig2,"\n" ; } } } Waere um jede hilfe dankbar. Andi
Datum: 20.06.2009-03:44

|
re: Neuling braucht Hilfe
|
Seitenanfang |
| Der Aufruf von "cut" ist unnoetig, besser die Dateien gleich mit Perl oeffnen und mit split() die Zeile zerteilen. "=~" ist der Bindeoperator und verknuepft einen skalaren Ausdruck mit einer Musterpruefung (Regexp), wenn so wie in deinen Fall kein Suchmuster steht sondern eingewoehnlicher Ausdruck dann wird dieser Ausdruck in ein Suchmuster umgewandelt, dabei wird der Inhalt doppelt interpoliert was zu unerwarteten Ergebnissen fuehren kann. Ich verstehe zwar was du vor hast, bin aber gerade nicht gewollt dass vollstaendig nachzuvollziehen. Etwas mehr Beispieldaten wuerden da schon helfen. -- asphalt
Datum: 20.06.2009-19:09

|
re: Neuling braucht Hilfe
|
Seitenanfang |
Hi asphalt, hier sind mehr Beispieldaten: Auszug von SOLL.txt:"0010","34","NORTH AMERICA" "0011","34","NORTH AMERICA" "00120","34","NORTH AMERICA" "00121","34","NORTH AMERICA" "00122","34","NORTH AMERICA" "00123","34","NORTH AMERICA" "001240","34","NORTH AMERICA" "001241","34","NORTH AMERICA" "0012420","38","BAHAMAS" "0012421","38","BAHAMAS" "0012422","38","BAHAMAS" "00124230","38","BAHAMAS" "00124231","38","BAHAMAS" "00124232","38","BAHAMAS" "00124233","38","BAHAMAS" "00124234","38","BAHAMAS" "001242350","38","BAHAMAS" "001242351","38","BAHAMAS" "001242352","38","BAHAMAS" "001242353","38","BAHAMAS" "001242354","38","BAHAMAS" "001242355","38","BAHAMAS" "001242356","38","BAHAMAS" "001242357","38","BAHAMAS MOBILE" "001242358","38","BAHAMAS" "001242359","38","BAHAMAS MOBILE" "00124236","38","BAHAMAS" "00124237","38","BAHAMAS" "00124238","38","BAHAMAS" "00124239","38","BAHAMAS" "00124240","38","BAHAMAS" "00124241","38","BAHAMAS" "001242420","38","BAHAMAS" "001242421","38","BAHAMAS" "001242422","38","BAHAMAS" "001242423","38","BAHAMAS" "001242424","38","BAHAMAS" "001242425","38","BAHAMAS" "001242426","38","BAHAMAS" "001242427","38","BAHAMAS MOBILE" "001242428","38","BAHAMAS" "001242429","38","BAHAMAS" "00124243","38","BAHAMAS" "00124244","38","BAHAMAS" "001242450","38","BAHAMAS" "001242451","38","BAHAMAS" "001242452","38","BAHAMAS" "001242453","38","BAHAMAS" "001242454","38","BAHAMAS" "001242455","38","BAHAMAS" "001242456","38","BAHAMAS" "001242457","38","BAHAMAS MOBILE" Auszug von EWSD.txt :CODE=0010,ORIG2=1-4,ZONO=410,BILLING=AMA! :CODE=0010,ORIG2=2-4,ZONO=410,BILLING=AMA! :CODE=0011,ORIG2=0-4,ZONO=34,BILLING=AMA! :CODE=0011,ORIG2=1-4,ZONO=410,BILLING=AMA! :CODE=0011,ORIG2=2-4,ZONO=410,BILLING=AMA! :CODE=00120,ORIG2=0-5,ZONO=34,BILLING=AMA! :CODE=00120,ORIG2=1-5,ZONO=410,BILLING=AMA! :CODE=00120,ORIG2=2-5,ZONO=410,BILLING=AMA! :CODE=00121,ORIG2=0-5,ZONO=34,BILLING=AMA! :CODE=00121,ORIG2=1-5,ZONO=410,BILLING=AMA! :CODE=00121,ORIG2=2-5,ZONO=410,BILLING=AMA! :CODE=00122,ORIG2=0-5,ZONO=34,BILLING=AMA! :CODE=00122,ORIG2=1-5,ZONO=410,BILLING=AMA! :CODE=00122,ORIG2=2-5,ZONO=410,BILLING=AMA! :CODE=00123,ORIG2=0-5,ZONO=34,BILLING=AMA! :CODE=00123,ORIG2=1-5,ZONO=410,BILLING=AMA! :CODE=00123,ORIG2=2-5,ZONO=410,BILLING=AMA! :CODE=001240,ORIG2=0-6,ZONO=34,BILLING=AMA! :CODE=001240,ORIG2=1-6,ZONO=410,BILLING=AMA! :CODE=001240,ORIG2=2-6,ZONO=410,BILLING=AMA! :CODE=001241,ORIG2=0-6,ZONO=34,BILLING=AMA! :CODE=001241,ORIG2=1-6,ZONO=410,BILLING=AMA! :CODE=001241,ORIG2=2-6,ZONO=410,BILLING=AMA! :CODE=001242,ORIG2=0-6,ZONO=38,BILLING=AMA! :CODE=001242,ORIG2=1-6,ZONO=415,BILLING=AMA! :CODE=001242,ORIG2=2-6,ZONO=415,BILLING=AMA! :CODE=001243,ZONO=34,BILLING=AMA! :CODE=001244,ZONO=34,BILLING=AMA! :CODE=001245,ZONO=34,BILLING=AMA! :CODE=001246,ORIG2=0-6,ZONO=44,BILLING=AMA! :CODE=001246,ORIG2=1-6,ZONO=415,BILLING=AMA! :CODE=001246,ORIG2=2-6,ZONO=415,BILLING=AMA! :CODE=001247,ORIG2=0-6,ZONO=34,BILLING=AMA! :CODE=001247,ORIG2=1-6,ZONO=415,BILLING=AMA! :CODE=001247,ORIG2=2-6,ZONO=415,BILLING=AMA! :CODE=001248,ORIG2=0-6,ZONO=34,BILLING=AMA!
Datum: 20.06.2009-19:22

|
re: Neuling braucht Hilfe
|
Seitenanfang |
| Mit verschachtelten Schleifen wird das nix da die innere Schleife immer erst komplett abgearbeitet wird, bevor die nächste Zeile von ESWD gelesen wird. 1) Erstelle eine sub die eine Zeile aus ESWD liest und die Daten aufbereitet. 2) Erstelle eine sub die eine Zeile aus SOLL liest und die Daten aufbereitet. 3) Öffne die Dateien ESWD und SOLL 4) Lies die erste Zeile der beiden Dateien ein 5) Vergleiche in der while-Schleife die gelesenen Daten und lies entsprechend Zeilen aus den Dateien durch Funktionsaufruf
Datum: 22.07.2009-01:11

|
|

|

|