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

GUIfreund
 2012-05-22 12:16
#158470 #158470
User since
2011-08-08
559 Artikel
BenutzerIn
[default_avatar]
2012-05-22T09:57:51 Trommelwirbel
hä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.
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
... 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

View full thread Problem mit Zeilenausgabe