Thread Macintosh Dateien unter Win in Perl einlesen!
(30 answers)
Opened by
Weman
at 2005-09-20 12:57
User since 2003-08-04
5873
Artikel
ModeratorIn
So, ich hab mal folgendes Programm geschrieben, allerdings weiß ich natürlich nicht, in wie weit das abhängig ist von den spezifischen Dingen in dieser Datei. Für diese tut es was es soll :)
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
#!/usr/bin/perl use strict; use warnings;
use IO::File;
main();
sub main { my $file = '85635.txt';
my $fh = new IO::File "< $file" or die "Can't open file '$file': $!";
<$fh>; # erste Zeile überlesen;
my $z2 = <$fh>; # zweite zeile lesen die "falsches Dateiformat in Zeile 2" unless $z2 =~ /ODPS_\d+_\d+/; my $z3 = <$fh>; # dritte Zeile Lesen die "falsches Dateiformat in Zeile 3" unless $z3 =~ /Date\s*(\d+\.\d+\.\d+)\s*Time\s*(\d+:\d+:\d+)/; my ($datum, $zeit) = ($1, $2);
print "Datum [$datum] Zeit [$zeit]\n"; # Testausgabe
my $state = 0; # Zustand: 0 = außerhalb eines DB-Blocks # 1 = innerhalb eines DB-Blocks my $dbname = ''; # Name der DB my %ergebnis = ( # Ergebnishash 'Datum' => $datum, 'Zeit' => $zeit, ); while (<$fh>) { # Rest der Datei lesen und dabei Verarbeiten # # Sind wir innerhalb eines DB-Blocks? # if ($state) { # # ist die gelesene Zeile leer? # if (/^\s*$/) { $state = 0; # Status umsetzen $dbname = ''; # DB-Namen löschen } # # anderenfalls Werte ermiteln und abspeichern: # else { /(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)/; push @{ $ergebnis{'DB'}->{$dbname} }, { spalte1 => $1, spalte2 => $2, spalte3 => $3, spalte4 => $4, spalte5 => $5, }; } } # # Sonst sind wir außerhalb: # else { if (/(KDY_.*\s*)$/) { $state = 1; # Status umsetzen chomp($dbname = $1); # DB-Namen löschen print "DB [$dbname]\n"; # Testausgabe } } }
use Data::Dumper; $Data::Dumper::Sortkeys = 1;
print Dumper \%ergebnis; }
Es erzeugt ein Ergebnishash %ergebnis, das die folgende Form hat:
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
$VAR1 = { 'DB' => { 'KDY_bgn_seq' => [ { 'spalte1' => 'bgn_5px', 'spalte2' => '2.000000', 'spalte3' => '0.000000', 'spalte4' => '0.000000', 'spalte5' => 'Fail' }, ... ], 'KDY_lines_seq' => [ { 'spalte1' => 'line_lpvs', 'spalte2' => '0.237976', 'spalte3' => '0.170000', 'spalte4' => '0.230000', 'spalte5' => 'Fail' }, { 'spalte1' => 'line_lpvl', 'spalte2' => '0.399231', 'spalte3' => '0.260000', 'spalte4' => '0.300000', 'spalte5' => 'Fail' }, ... ], 'KDY_os_45_seq' => [ { 'spalte1' => 'offset_45', 'spalte2' => '1.089027', 'spalte3' => '0.000000', 'spalte4' => '8.000000', 'spalte5' => 'Pass' } ], 'KDY_printpos_seq' => [ { 'spalte1' => 'Coordinate_TLX', 'spalte2' => '-29.523100', 'spalte3' => '0.000000', 'spalte4' => '0.000000', 'spalte5' => 'Fail' }, ... ], 'KDY_sharpness_seq' => [ { 'spalte1' => 'sharp_tlv', 'spalte2' => '0.056915', 'spalte3' => '0.090000', 'spalte4' => '0.150000', 'spalte5' => 'Fail' }, ... } ], 'KDY_threshold_seq' => [ { 'spalte1' => 'white_max', 'spalte2' => '163.038700', 'spalte3' => '175.000000', 'spalte4' => '245.000000', 'spalte5' => 'Fail' }, { 'spalte1' => 'black_max', 'spalte2' => '3.621212', 'spalte3' => '0.000000', 'spalte4' => '30.000000', 'spalte5' => 'Pass' } ], 'KDY_tilt_seq' => [ { 'spalte1' => 'tilt_meas_1', 'spalte2' => '29.621620', 'spalte3' => '10.000000', 'spalte4' => '15.000000', 'spalte5' => 'Fail' }, ... ] }, 'Datum' => '15.09.2005', 'Zeit' => '11:35:54' };
Wie ich sehe, sind in der Datei sehr viele Abschnitte mit dem Titel KDY_bgn_seq. Falls diese einzeln abgelegt werden sollen, muss ich das Programm nochmal umschreiben. Aber Du kannst ja erstmal sehen, ob Du verstehst, was da passiert und ob das ungefähr das ist, was Du brauchst.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
View full thread Macintosh Dateien unter Win in Perl einlesen!
|