2012-05-22T09:57:51
Trommelwirbelhättest du vielleicht auch ein hinweis, wie es vielleicht mit meinem code gehen könnte?
Hier eine alternative Lösung. Längst nicht so elegant wie die von topeg, aber näher an deinem Kode.
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') {
$gmd=$gmd3;
}
if ( $gmd3 ne $gmd ) {
$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... welche dann zum Beispiel dann 'OBSTBNID versiegelt' heißen soll oder 'KALLLUFTDRUCK', also jeweils wie die erste Zeile eines neuen Abschnitts.
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