Thread Datei blockweise einlesen und am Ende jedes Blockes schreiben (1 answers)
Opened by alla at 2011-05-13 15:45

alla
 2011-05-13 15:45
#148578 #148578
User since
2009-10-19
21 articles
BenutzerIn
[default_avatar]
Hallo zusammen,

ich bastele gerade an einem einfachen Skript: Ich habe einen Input in Form einer Text-Datei ($filetxt), die ich dann blockweise einlesen will. Ich lese also die Blöcke und speichere sie in ein Array. Dann gehe ich Block für Block durch und suche nach bestimmten ID's, die bestimmte Kriterien ausfüllen müssen. Anhand dieser ID lese ich dann eine XML-Datei ein ($xmlfile) und suche nach dieser XML-ID, extrahiere einige Attribute und Elemente aus dieser XML zur ID und speichere sie im $string ein. $string soll nun am Ende des eingelesenen Textblocks von $filetxt eingefügt werden.

Es klappt alles bis auf das Schreiben blockweise in die $filetxt. Hier ist ein Stück Code:
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
my @blocks = do { local $/ = "0000:"; map {chomp;$_} <DATA> };
#$position = tell(DATA);

foreach (@blocks) {
        chomp;
        $_ =~ m/(\d+)/g;
        my $id= $1;
        if ($_ =~m /Suche:T/g) {
                foreach my $record(@records) {
                        $xmlID = "ID${id}";
                        $elt = $record->att('id');
                        if ($elt eq $xmlID) {
                                my @cats = $record->descendants('data');
                                foreach $cat(@cats) {
                                        $tag = $cat->latt('tag');
                                        if ($tag eq $rtc) { 
                                        $string = $cat->first_child_text('sub');
                                        }
                                }
                        }
                } 
        }
        else {
                print "e\n";
        }
}
__DATA__
0000:sf
0002:sff
0003:wqet
Suche:T

0000:sf
0002:sff
0003:wqet
Suche:T

0000:sf
0002:sff
0003:wqet
Suche:T


Kann ich tell(DATA) benutzen, um Dateizeiger zu erstellen? Wo soll ich ihn aufrufen? Mein Output will ich dann so:
0000:sf
0002:sff
0003:wqet
Suche:T
0004:stringausXML

0000:sf
0002:sff
0003:wqet
Suche:T
0004:stringausXML

etc.
Danke im Voraus.
Gruß

View full thread Datei blockweise einlesen und am Ende jedes Blockes schreiben