Thread Problem mit Zeilenausgabe
(7 answers)
Opened by Trommelwirbel at 2012-05-22 10:27 2012-05-22T09:57:51 Trommelwirbel Hier eine alternative Lösung. Längst nicht so elegant wie die von topeg, aber näher an deinem Kode. 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 use strict; use warnings; my ($ordner)="daten_2/"; my ($ausgabe)="result/"; my ($m,$gmd,$name); my $gmd3 = ''; my $gm; my (@files)=(); opendir DIR,$ordner; @files = readdir(DIR); closedir(DIR); -d $ausgabe or mkdir $ausgabe; foreach $m (@files) { next if -d $m; open (my $fh, '<', $ordner.$m) or die "Fehler beim oeffnen von $m\n"; print "verarbeite $m ...\n"; while(<$fh>) { $gmd=substr($_,0,4); if ( $gmd eq 'ENDE') { #Ende Kennung muss zum letzten Block $gmd=$gmd3; } if ( $gmd3 ne $gmd ) { #neue Station... $gmd3=$gmd; my ($file) = /(.+?) \d/; open ($gm,">>", $ausgabe . $file ) or die "Fehler beim oeffnen von $ausgabe.$gmd\n"; } print $gm $_; } close($gm); close($fh); } Dazu ein paar Anmerkungen: - Für Filehandles my-Variablen verwenden. - open mit 3 Parametern verwenden. - Kein open ohne die. - Doppelten Kode vermeiden. - Es macht keinen Sinn, das Newline abzuschneiden und beim Schreiben wieder anzuhängen. Deine Angabe Quote ist widersprüchlich. Ich habe mich dafür entschieden, vor dem ersten Zahlenblock abzuschneiden. Das wirst du noch anpassen müssen. Edit:Bei der Fehlermeldung muss es $ausgabe$file heißen. Editiert von GUIfreund: Fehlermeldung im Kode korrigiert. Last edited: 2012-05-22 12:28:08 +0200 (CEST) Gruß
GUIfreund |