Leser: 4
7 Einträge, 1 Seite |
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#
Linuxer+2009-02-25 18:21:03--unter der Annahme, dass die Zeile mit AAU und ARR immer direkt nach der Zeile mit AHF und ADC folgt, folgender Quickhack zur Veranschaulichung:
[...]
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.
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#
Linuxer+2009-02-25 22:01:07--[perl]
#! /usr/bin/perl
# 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;
}
Linuxer+2009-02-26 13:06:14--Die von mir gezeigten Beispiele funktionierten meines Erachtens wie gewünscht (jedenfalls größtenteils).
7 Einträge, 1 Seite |