Thread Matching in Datei und Ausgabe
(3 answers)
Opened by krusty at 2008-05-07 23:38
Hallo,
habe mal wieder ein kleines Verständnisproblem. Folgende Situation. In der einen Datei ist folgender Inhalt xxx12345678irgend ein Text der beliebig lang sein kann TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText xxx23456789wieder ein Text der beliebig lang sein kann aber in einer Zeile ist TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText xxx34567890neuer Text mit x zeichen in der Zeile TextTextTextTextTextTextTextTextTextTextText TextTextTextTextTextTextTextTextTextTextText Die Datei geht immer so weiter. In einer zweiten Datei habe ich folgende Inhalt. 23456789 96325874 88554466 77663311 34567890 99999999 Mein Ziel ist es, die einzelnen Nummern z.b. 12345678 in der ersten Datei zu finden. Sollten diese nicht gefunden werden, soll die Zeile mit der Nummer und alle folgenden bis zu der nächsten Zeile in der er die Nummer findet ausgegeben werden. Um mein Ziel zu erreichen habe ich folgendes Miniscript erstellt. 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 #!C:\Perl\bin\perl.exe -w # Benötigte Variablen my $dep_arc_file = "C:\\Perl\\scripts\\test.csv"; my $dia_ert_file = "C:\\Perl\\scripts\\D925007"; my @arc = (); my @ert = (); open(ARC, $dep_arc_file ) || die "Can not open file $dep_arc_file\n"; while (<ARC>) { # Spaltenueberschrift ignorieren if (! /^Zeilenueberschrift/) { chomp; push (@arc, $_); } } close(ARC); open(DIA, $dia_ert_file) || die "Can not open file $dia_ert_file\n"; while (<DIA>) { chomp; push (@ert, $_); } close(DIA); foreach my $line (@ert) { my $found = 0; my $rest = 1; if ( $line =~ /^xxx(\d{8})/ ) { foreach my $tmp (@arc) { if ($tmp eq $1) { $found = 1; $rest = 2; } } } if (( $found ne 1 ) && ( $rest eq 1 )) { print $line."\n"; } } Mein Problem ist nun, das ich entweder einige Zeilen doppelt ausgegeben bekomme oder aber das ich die folgende Zeilen nach der Zeile mit dem Suchmuster nicht ausgegeben bekomme. Könnte mir evtl. jemand eine Tipp geben, was ich falsch mache. |