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

Linuxer
 2009-02-25 19:21
#119148 #119148
User since
2006-01-27
3890 Artikel
HausmeisterIn

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

View full thread Dateien durchsuchen, über mehrere Zeilen hinweg