Thread Problem mit Zeilenausgabe
(7 answers)
Opened by Trommelwirbel at 2012-05-22 10:27
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. 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); } |