Thread Messdaten auswerten (3 answers)
Opened by IcemanFlo at 2011-06-03 17:38

Gast IcemanFlo
 2011-06-03 17:38
#149398 #149398
Hi Leute,
ich muß einen haufen Messdaten in einzelnen Textfiles auswerten. Da Studenten ja bekanntlich faul sind hab ich mir gedacht das liese sich bestimmt mittels Perl automatisieren.

Also wie soll es ablaufen, ich hab ein Verzeichnis (./in) in dem liegen die ganzen Rohdaten. Perl soll die Dateinamen einlesen und nacheinander abarbeiten und die Ausgabedateien in das Ausgabeverzeichnis schreiben (./out).

Der Prozessablauf sollte im folgenden ungefähr so aussehn

Messdatei öffnen
-> erste Zeile einlesen um eine Maske mit den Spalten zu erstellen die Anschließend in die Ausgabedatei übernommen werden sollen
-> ab der zweiten Zeile mit Hilfe der Maske Daten in das Ausgabearray überführen
-> Ausgabearray in Ausgabedatei schreiben.

Soweit so gut. Aber irgendwie klappt das ganze noch nicht so recht und ich finde den falschen Fehler einfach nicht. Vielleicht hat ja einer von euch eine Idee, nachfolgende mal das was ich schon gecoded hab
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/perl

$eingabe_endung = ".txt";
$ausgabe_excel = ".xls";
$ausgabe_ceda = ".csv";

@parameter = ('Raw', 'Normal');


#Verzeichnis einlesen
opendir(IN, "./in/");
@dateien = readdir(IN);
closedir(IN);

foreach $datei(@dateien) {
        print $datei,"\n";
        if ($datei eq '.' || '..') {
                shift @dateien;
        }
        $datei =~s/\.txt//g;
}
#Nebenprogramme
#Maske erstellen
sub vergleich {
        $vergleich = shift;
        foreach $parameter (@parameter) {
                if ($parameter eq $vergleich) {
                        $rueckgabewert = 1;
                } else {
                        $rueckgabewert = 0;
                }
        }
}
#Daten in Ausgabearray schreiben
sub elemente_uebernehmen {
        if ($zaehler == 1) {
                shift @eingabe;
        } else {
                push(@ausgabe,shift(@eingabe)."\t"); #\t Tabulator als Trennelement für Excelausgabe
        }
}


#Hauptprogramm
foreach $dateiname(@dateien) {
        $counter == 1;
        @ausgabe = undef;
        @spalten = undef; 
        
        open (EINGABE, "./in/$dateiname".$eingabe_endung)
        or die "Fehler beim öffnen der Datei $!\n";
        
        open(AUSGABEXLS, ">./out/$dateiname".$ausgabe_excel)
        or die "Fehler beim öffnen der Datei: $!\n";
        
        while (<EINGABE>) {
                chomp(@eingabe = split(/\t/));
                print $counter,"\n";
                if ($counter == 1) {
                        foreach $datensatz (@eingabe) {
                                $rueckgabewert = 0;
                                &vergleich($datensatz);
                                if ($rueckgabewert == 1) {
                                        push(@spalten, 0);
                                } else {
                                        push(@spalten, 1);
                                }
                        }
                        $counter++;
                } elsif ($counter > 1) {
                        foreach $zaehler (@spalten) {
                                &elemente_uebernehmen($zaehler);
                        }
                        $counter++;
                        push(@ausgabe, "\n");
                }
        }
        print AUSGABEXLS @ausgabe;
        
        close (EINGABE)
        or die "Fehler beim schließen der Datei $!\n";
        
        close (AUSGABEXLS)
        or die "Fehler beim schließen der Datei: $!\n";
}

Last edited: 2011-06-03 18:40:28 +0200 (CEST)

View full thread Messdaten auswerten