Thread Dateien durchsuchen, über mehrere Zeilen hinweg (6 answers)
Opened by Breston at 2009-02-25 18:43

Linuxer
 2009-02-25 23:01
#119156 #119156
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
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!

View full thread Dateien durchsuchen, über mehrere Zeilen hinweg