Thread Dateien durchsuchen, über mehrere Zeilen hinweg
(6 answers)
Opened by Breston at 2009-02-25 18:43
Naja, Eleganz liegt im Auge des Betrachters ;o)
Wenn ZZZEND# immer das Ende eines Datensatzes ist, dann könnte man $/ entsprechend lokalisieren, dass anstatt zeilenweise eben datensatzweise eingelesen werden kann. Dann könnte man es so tun: 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 #! /usr/bin/perl use strict; use warnings; # Datei öffnen bitte implementieren { # EDIT: fixed String local $/ = "ZZEND#\n"; while ( my $dataset = <DATA> ) { # ersetze DATA mit Dateihandle #### Entweder # EDIT: ohne regex und Ruecksicht auf Verteilung auf Zeilenanzahl if ( index($dataset, 'AHF020', 0 ) >= 0 && index($dataset, 'ADC400', 0 ) >= 0 && index($dataset, 'AAU1995', 0 ) >= 0 && index($dataset, 'ARR1995', 0 ) >= 0 ) { print $dataset; } # oder mit regex (dieser ignoriert die Anzahl der Zeilen auf die die 4 festen Strings verteilt sein können if ( $dataset =~ m/AHF020.*ADC400.*AAU1995.*ARR1995/s ) { print $dataset; } # EDIT: oder mit regex (dieser macht es erforderlich, dass die ersten 2 festen Strings in einer und die anderen 2 in der nächsten auftauchen if ( $dataset =~m/AHF020.*ADC400.*\n.*AAU1995.*ARR1995/ ) { print $dataset; } } } # 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# Edit: striked: [s]Beachte aber, dass das Verhalten der beiden Lösungen (meine erste und jetzt diese) etwas unterschiedlich ist und dass die Ausgabe sich entsprechend unterscheidet![/s] 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! |