Thread korrektes Auslesen von Daten aus einem File (1 answers)
Opened by ajcountry at 2008-07-31 16:43

ajcountry
 2008-07-31 16:43
#112944 #112944
User since
2008-07-22
4 Artikel
BenutzerIn
[default_avatar]
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é

View full thread korrektes Auslesen von Daten aus einem File