Thread korrektes Auslesen von Daten aus einem File
(1 answers)
Opened by ajcountry at 2008-07-31 16:43
Hi,
bin ein kleiner noob im Bereich Perl, da ich grad damit anfange und habe ein Problem mit dem korrekten Auslesen von Daten aus einem File. Der Aufbau des Files sieht wie folgt aus: . . . [Wertetabelle1] | [Zeile] A1 3.227 A2 1.127 A3 -1.471 [Zeile] B1 6.684 B2 1.054 B3 6.967 B4 4.008 [Zeile] C1 2.757 C2 -3.192 C3 -2.820 [Zeile] D1 4.245 D2 3.973 | [Wertetabelle2] | [Zeile] A1 3.227 A2 1.127 A3 -1.471 [Zeile] B1 6.684 B2 1.054 B3 6.967 B4 4.008 [Zeile] C1 2.757 C2 -3.192 C3 -2.820 [Zeile] D1 4.245 D2 3.973 | . . . Mein Quelltext zum Auslesen des Files: 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 #!/usr/bin/perl use strict; my $line; my @words; my @liste; my $i; _schreibeWerte(); sub _schreibeWerte { open(FILE, "<bla.txt") or die "cannot open bla.txt"; while($line=<FILE>) { if($line =~ /\[Wertetabelle1\]/ ){ $line=_Wertetabelle();} if($line =~ /\[Wertetabelle2\]/ ){ $line=_Wertetabelle();} } close(FILE); } sub _Wertetabelle { while($line=<FILE>) { if($line =~ /\[Zeile\]/) { for($i=0;$i<=50;$i++) { $line=<FILE>; ## Einlesen der Werte in den Array @words = split /\s+/,$line; push(@liste, $words[1]); if($line =~ /\[Zeile\]/ ) {last;} print $line; } if($line =~ /\[Wertetabelle1\]/ ) { last;} if($line =~ /\[Wertetabelle2\]/ ) { last;} } } return $line; } In dem Unterprogramm sub _schreibeWerte() lese ich das File aus und suche nach den Wörtern [Wertetabelle1] bzw. [Wertetabelle2]. Wenn er eines der beiden gefunden hat, soll er in das Unterprogramm sub _Wertetabelle springen. Das funktioniert soweit. In dem Unterprogramm sub _Wertetabelle möchte ich dann die darauffolgende [Zeile] suchen. Nach einer [Zeile] kommt definitiv ein oder mehrere Werte. Um mehrere Werte einlesen zu können benötige ich eine Schleife. Deswegen die for-Schleife. In der for-Schleife soll der nächste Wert eingelesen werden (da wo die Zahl drin steht) und von dem Index (A1, A2, usw. abgetrennt werden. Danach speichere ich diese in ein Array (@liste). Da mehrere Werte eingelesen werden müssen, nutze ich als Abbruchkriterium [Zeile]. Sobald alle Zeilen der Wertetabelle1 eingelesen wurden, breche ich mit [Wertetabelle1] ab. Das Problem was ich habe das sobald er die Abbruchbedingung [Zeile] gefunden hat die nächsten Werte überspringt (B1,B2,B3,B4 bzw. D1,D2) und erst wieder die nächsten Werte ausgibt. Ebenfalls gibt er mir auch die Werte von Wertetabelle2 aus, was sicher daran liegt, dass die Abbruchbedingung nicht funktioniert. Wie kann ich erreichen, dass er mir alle Werte für die jeweilige Wertetabelle ausgibt? Vielen Dank schon mal für die Hilfe. Gruß, André |