Thread Problem mit Zeilenausgabe (7 answers)
Opened by Trommelwirbel at 2012-05-22 10:27

Trommelwirbel
 2012-05-22 10:27
#158459 #158459
User since
2011-11-10
28 Artikel
BenutzerIn
[default_avatar]
Hallo an Alle,

hier erst mal die Dateien zu meinem Problem.

Das hier unten, ist ein Teil der zu bearbeitenden .txt-Datei. Im Origial, ist sie noch viel umfangreicher, aber sie besteht nur aus 'OBST'-Abschnitten und 'KALL'-Abschnitten.

Text (3.5kb):
OBSTBNID versiegelt 02626 1 11995 0 010 11995 6 0 N1M1 MM BNID
OBST M 2596.400 5509.040 0. 0.000 0.000
OBSTDATEN
OBST 1 195 0 0N1M-41 0 0 71061895310193 3113 0 0 0 0 0 0
OBST 1 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 2 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 2 19512 0N1M-41 0 0 0 0 010762 0 0 0 0 0 0
OBST 3 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 3 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 4 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 4 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 5 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 5 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 6 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 6 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 7 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 7 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 8 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 8 19512 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 9 195 0 0N1M 01 0 0 0 0 0 0 0 0 0 0 0 0
OBST 9 19512 0N1M-41 0 0 0 0 0 2781 021915 035364 029378
OBST10 195 0 0N1M-41 5455 9755 8855 3355 4455 5355 6655 -1 -1 -1 -1 -1
ENDE
KALLLuftdruck 02880 1 11995 0 010 11995 6 0 Y1M1 hPa LUDR
KALL M 2602.710 5519.190 308. 0.000 0.000
KALLDATEN
KALL 1 195 0 0Y1M-11100431004210037100451005210063100701008010092101021011210118
KALL 1 19512 0Y1M-11101251012410125101301013610141101471015010154101581015810155
KALL 2 195 0 0Y1M-11101601015910158101601016310164101701017410180101861019010196
KALL 2 19512 0Y1M-11101981020310205102111021810228102451025810272102831029610304
KALL 3 195 0 0Y1M-11103161032310329103361035010356103611036710374103841038810393
KALL 3 19512 0Y1M-11103951039310394103931039710398104041040710413104151041810419
KALL 4 195 0 0Y1M-11104191042010420104211042110422104191042310425104301043010429
KALL 4 19512 0Y1M-11104271041610416104141041410415104181042210424104211042610428
KALL 5 195 0 0Y1M-11104271042410423104161041210421104211041810415104131040810400
KALL 5 19512 0Y1M-11103931037810369103671036410363103621036210363103621035910351
KALL 6 195 0 0Y1M-11103431032910321103131030710303102971029710296102971029710295
KALL 6 19512 0Y1M-11102951029310293102971030610312103231033110335103401034410344
KALL 7 195 0 0Y1M-11103461035310353103631036310371103741038010389103981040810414
KALL 7 19512 0Y1M-11104151041610417104221042810436104451044910454104551045710464
KALL 8 195 0 0Y1M-11104661046610464104651046510465104661046710468104671046710464
KALL 8 19512 0Y1M-11104551044410429104211040910412104021039410392103841038010376
KALL 9 195 0 0Y1M-11103711036510359103561035510351103531035410356103601036210364
KALL 9 19512 0Y1M-11103661035810356103501034710343103401033010320102941027810270
KALL10 195 0 0Y1M-1110258102431023110214102121020210212 -1 -1 -1 -1 -1
ENDE


Im Moment hab ich diesen Code, welcher aus der eingelesenen Datei jeweils die 'OBST' und 'KALL' herausfiltert und in getrennte Dateien schreibt. In der Ausgabe habe ich dann jeweils eine Datei die 'OBST' heißt und eine die 'KALL' heißt. Soweit in Ordnung. Nun würde ich gerne jeden dieser Abschnitte in eine eigene Datei schreiben, welche dann zum Beispiel dann 'OBSTBNID versiegelt' heißen soll oder 'KALLLUFTDRUCK', also jeweils wie die erste Zeile eines neuen Abschnitts.

Kam bis jetzt nicht auf eine gute Idee, bzw. meine Ideen gingen ins leere.

Kann mir jemand helfen?

Gruß Trommelwirbel

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
49
50
use strict;
use warnings;

my ($ordner)="daten_2/";
my ($ausgabe)="result/";

my ($m,$gmd,$gmd3,$name);
my (@files)=();

opendir DIR,$ordner;
        @files = readdir(DIR);
closedir(DIR);

foreach $m (@files) {
        next if $m =~ /\.$/; 

        open FH,$ordner.$m or die "Fehler beim oeffnen von $m\n";
        print "verarbeite $m ...\n";
        
        while(<FH>) {
                chomp;

                $gmd=substr($_,0,4);            

                if ( !$gmd3 ) {
                        #am Anfang...
                        $gmd3=$gmd;     
                        open (GM,">>".$ausgabe.$gmd );  
                }
                
                if ( $gmd eq 'ENDE') {
                        #Ende Kennung muss zum letzten Block
                        $gmd=$gmd3;
                }

                if ( $gmd3 ne $gmd ) {
                        #neue Station...
                        close(GM);
                        $gmd3=$gmd;
                        open (GM,">>".$ausgabe.$gmd ); 
                }

                print GM $_."\n";

        }
        
        close(GM);
        close(FH); 

}

View full thread Problem mit Zeilenausgabe