Thread Dateien durchsuchen, über mehrere Zeilen hinweg
(6 answers)
Opened by Breston at 2009-02-25 18:43
Hi,
unter der Annahme, dass die Zeile mit AAU und ARR immer direkt nach der Zeile mit AHF und ADC folgt, folgender Quickhack zur Veranschaulichung: 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 #! /usr/bin/perl -l use strict; use warnings; # Datei öffnen bitte implementieren # Dateihandle ersetzen durch oben genutzten while ( my $line = <DATA> ) { my $pos = tell DATA; # Dateihandle ersetzen # Bei dieser Suchmethode ist die Reihenfolge der gesuchten Strings egal. # Suche nach festem String ohne Regex: #if ( index($line, 'AHF020', 0) >= 0 and index($line, 'ADC400', 0) >= 0 ) { # Such mit Regex if ( $line =~ m{AHF020} and $line =~ m{ADC400} ) { # naechste Zeile einlesen my $line2 = <DATA>; # Dateihandle ersetzen if ( $line2 =~ m{AAU1995} and $line2 =~ m{ARR1995} ) { print $line, $line2; } else { # kein Treffer in der zweiten Zeile, also Pointer zuruecksetzen # damit die Suche nach der ersten Zeile beim n?chsten Durchlauf # erfolgen kann. seek( DATA, $pos, 0 ); # Dateihandle ersetzen } } } # Datei schliessen bitte implementieren # Der folgende Teil kann wegfallen, wenn aus der Datei gelesen wird __DATA__ AIEA7#AHF020#AQX100#AJK888#AFED#CLD200901#ADC400#ADL0000000000000025,00+#AEA111# AAU1995#ARR1995#ZZZEND# AIEA7#AHF020#AQX100#AJK888#AFED#CLD200901#ADC400#ADL0000000000000025,00+#AEA111# AIEA7#AHF020#AQX100#AJK888#AFED#CLD200901#ADC400#ADL0000000000000025,00+#AEA111# AAU1995#ARR1995#ZZZEND# Wenn die Datenzeilen immer das gleiche Format haben, und die Felder die gleiche Reihenfolge, dann könnte man auch jede Zeile splitten und die entsprechende Feldwerte direkt vergleichen. Wie man es letztendlich macht oder machen sollte, hängt von der Genauigkeit der Aufgabendefinition ab und dem gewünschten Ziel, welches man erreichen will. edit: s/genauigkeit aufgabendef/genauigkeit der aufgabendef/ Last edited: 2009-03-19 12:14:56 +0100 (CET) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |