Thread Datenzeilen einlesen (6 answers)
Opened by qwe123qwe at 2013-10-08 23:10

qwe123qwe
 2013-10-14 18:38
#171152 #171152
User since
2013-10-08
65 articles
BenutzerIn
[default_avatar]
im Prinzip hab ich das hinbekommen, d.h. ich erhalte die Datei(en), die ich brauche.

Bei der Codekosmetik hab ich aber noch ein Problem : ich wollte das Ganze in eine Schleife packen, um mehrere solcher Dateien auf einmal zusammenfassen zu können. Als Beispiel benutze ich folgende zusammengesetzte Datei:
Quote
das ist alles Text
17:16:05 8.339,75
17:15:10 2.100,76
* 1
* 2
das ist alles Text
17:56:05 139,75
17:55:10 139,76
* 1
* 2


Umgesetzt hab ich das mit einer Liste aus Hashes.
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
#!/usr/bin/perl -w
use strict;

my @werte = (
        {       'Muster' => '(\d+):(\d+):(\d+)\s+(\d+)\.(\d+),(\d+)',
                'Amizahl' => '$values[3].$values[4].".".$values[5]'
        },
        {       'Muster' => '(\d+):(\d+):(\d+)\s+(\d+),(\d+)',
                'Amizahl' => '$values[3].".".$values[4]'
        }
);
my @sekunden;
my @kurse;

foreach my $w(0..$#werte) {
    open (OUTDATEI,">>/home/tester/tmpfs/outdatei") || die "kann Ausgabedatei nicht öffnen: $!";
    @sekunden = ();
    @kurse = ();
        
    open (UNBEREINIGT,"</home/tester/tmpfs/test1.unb") || die "kann unbereinigte Datei nicht öffnen: $!";

        while (my $line = <UNBEREINIGT>) {
            my @values = $line =~/$werte[$w]{'Muster'}/;
            next unless @values;
            print OUTDATEI $line;

            my $sec = $values[2];
            $sec += $values[1]*60;
            $sec += $values[0]*3600;
            my $amizahl = $werte[$w]{'Amizahl'};
print ("$amizahl\n");
            if ($values[0] < 22 && $values[0] > 07) {
                push (@sekunden, "$sec");
                push (@kurse, "$amizahl");
            }
        }

    close (UNBEREINIGT);
    
    close (OUTDATEI);
}

Ziel ist es, die Kommazahlen in amerikanischem Format zu bekommen.
Mit diesem Code bekomme ich durch den Printbefehl die Ausgabe
Quote
$values[3].$values[4].".".$values[5]
$values[3].$values[4].".".$values[5]
$values[3].".".$values[4]
$values[3].".".$values[4]

Mir fehlt also noch der Schritt, in dem nach der Expandierung des Hash die für die values vorgenommen wird.

Wie kann ich das denn hinbeommen ?

View full thread Datenzeilen einlesen