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

topeg
 2011-06-03 23:36
#149407 #149407
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Ich habe den Code etwas überarbeitet.
Ich habe ihn nicht getestet, er kann noch Tippfehler enthalten
more (20.9kb):
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/perl
use strict;
use warnings;

my $indir='./in/';
my $outdir='./out/';

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

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

#Verzeichnis einlesen
my @dateien=read_dir($indir,$eingabe_endung);

#Hauptprogramm
for my $dateiname (@dateien)
{
  my $counter = 1;
  my $ausgabe;

  open(my $ifh, '<' ,$indir.$dateiname) or die("ERROR open $indir$dateiname ($!)\n");

  my $name=split_name($dateiname);

  open(my $ofh, '>', $outdir.$name.$ausgabe_excel) or die("ERROR open $outdir$name$ausgabe_excel ($!)\n");

  my @spalten;
  while (my $line=<$ifh>)
  {
    chomp($line);
    my @elements=split(/\t/,$line);

    print $counter,"\n";

    if ($counter == 1)
    {
      for my $datensatz (@elements)
      {
        my $ok=vergleich($datensatz,\@parameter);
        push(@spalten,$ok);
      }
    }
    else
    {
      my @list=elemente_uebernehmen(\@elements,\@spalten);
      print $ofh join("\t",@list)."\n";
    }
  }

  $counter++;

  close($ifh) or die("ERROR close $indir$dateiname ($!)\n");

  close($ofh) or die("ERROR close $outdir$name$ausgabe_excel ($!)\n");
}

#Nebenprogramme
#Funktionen
###########################################################################

# Verzeichnis lesen
# und die erlaubten Dateien zurück geben
sub read_dir
{
  my $dir=shift;
  my $filter=shift;
  my @list;
  opendir(my $in, $indir) or die("ERROR open $indir ($!)\n");
  while(my $file=readdir($in))
  {
    next if($file=~/^\.\.?/)
    next if(!-f $indir.$file);
    next if($file!~/\Q$filter\E$/);
    push(@list,$file);
  }
  closedir($in);
  return @list;
}

# Endung von einem Dateinamen entfernen
sub split_name
{
  my $name=shift;
  $name=~s/\..+?$//;
  return $name;
}

#Maske erstellen
sub vergleich
{
  my $vergleich = shift;
  my $params=shift;
  my $ok=0;
  for my $parameter (@$params)
  {
    if ($parameter eq $vergleich)
    {
      $ok = 1;
      last;
    }
  }
  return $ok;
}

sub elemente_uebernehmen
{
  my $list=shift;
  my $spalten=shift;
 
  my @return_list;
  for my $pos (1..$#$spalten)
  {
    push(@return_list,$list->[$pos]) if($spalten->[$pos]);
  }
  return @return_list;
}


Grundsätzlich:
Nutze strict und warnings
deklariere die Variablen da wo du sie brauchst, und erkennen den Gültigkeitsbereich der Variablen
Übergebe variablen an die Funktionen und nutze keine globalen Variablen dafür
Nutze die Möglichkeiten der Variablenrückgabe aus Funktionen
Schreibe direkt in die Dateien, oder öffne sie erst wenn du in sie schreiben willst.
Zeige bei welchen Dateien Fehler aufgetreten sind.

View full thread Messdaten auswerten