Thread Matching in Datei und Ausgabe (3 answers)
Opened by krusty at 2008-05-07 23:38

krusty
 2008-05-07 23:38
#109419 #109419
User since
2006-01-27
91 Artikel
BenutzerIn
[default_avatar]
Hallo,

habe mal wieder ein kleines Verständnisproblem.
Folgende Situation. In der einen Datei ist folgender Inhalt
xxx12345678irgend ein Text der beliebig lang sein kann
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
xxx23456789wieder ein Text der beliebig lang sein kann aber in einer Zeile ist
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText
xxx34567890neuer Text mit x zeichen in der Zeile
TextTextTextTextTextTextTextTextTextTextText
TextTextTextTextTextTextTextTextTextTextText

Die Datei geht immer so weiter.

In einer zweiten Datei habe ich folgende Inhalt.
23456789
96325874
88554466
77663311
34567890
99999999


Mein Ziel ist es, die einzelnen Nummern z.b. 12345678 in der ersten Datei zu finden. Sollten diese nicht gefunden werden, soll die Zeile mit der Nummer und alle folgenden bis zu der nächsten Zeile in der er die Nummer findet ausgegeben werden.

Um mein Ziel zu erreichen habe ich folgendes Miniscript erstellt.

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
44
45
46
47
48
#!C:\Perl\bin\perl.exe -w

# Benötigte Variablen
my $dep_arc_file = "C:\\Perl\\scripts\\test.csv";
my $dia_ert_file = "C:\\Perl\\scripts\\D925007";
my @arc = ();
my @ert = ();

open(ARC, $dep_arc_file ) || die "Can not open file $dep_arc_file\n";
while (<ARC>) 
{
        # Spaltenueberschrift ignorieren
        if (! /^Zeilenueberschrift/) 
        {
                chomp;
                push (@arc, $_);
        }
}
close(ARC);

open(DIA, $dia_ert_file) || die "Can not open file $dia_ert_file\n";
while (<DIA>)
{
        chomp;
        push (@ert, $_);
}
close(DIA);

foreach my $line (@ert)
{
        my $found = 0;
        my $rest = 1;
        if ( $line =~ /^xxx(\d{8})/ )
        {
                foreach my $tmp (@arc)
                {
                        if ($tmp eq $1)
                        {
                                $found = 1;
                                $rest = 2;
                        }
                }
        }
        if (( $found ne 1 ) && ( $rest eq 1 ))
        {
                print $line."\n";
        }
}


Mein Problem ist nun, das ich entweder einige Zeilen doppelt ausgegeben bekomme oder aber das ich die folgende Zeilen nach der Zeile mit dem Suchmuster nicht ausgegeben bekomme.

Könnte mir evtl. jemand eine Tipp geben, was ich falsch mache.

View full thread Matching in Datei und Ausgabe