Thread Messdaten auswerten
(3 answers)
Opened by IcemanFlo at 2011-06-03 17:38
Ich habe den Code etwas überarbeitet.
Ich habe ihn nicht getestet, er kann noch Tippfehler enthalten 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. |