Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array-Varriable reagiert nicht...


skall - Mo 26.01.09 18:41
Titel: Array-Varriable reagiert nicht...
so und noch einmal huete nabend :D:D:D


Delphi-Quelltext
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:
procedure DatenEinlesen (DatumWert:StringVar MittelWert:TStundenMittel; MaxWert:TDatenSatz);
  var buffer, Volt : String;
      NullWert, Minute, Stunden,h, m, e, k, i : Integer;
      VoltWert, StMittel : Real;
      TextDatei : TextFile;
      Liste : TStringList;
Begin
  AssignFile(TextDatei, DatumWert + '.dat');
  FileMode := fmOpenRead;
  Reset(TextDatei);
  e := 0;
  For h := 1 To 12 Do
      begin
        e := e + 1;
        VoltWert := 0;
        For m := 0 To 59 Do
            begin
              while not Eof(TextDatei) do
                 Begin
                   Liste := TStringList.Create;
                   ReadLn(TextDatei, buffer);
                   k := Pos(#9, buffer) - 1;
                   Volt := '';
                         For e := 1 To k Do
                             begin
                               Volt := Volt + buffer[e];
                             end;
                   VoltWert := VoltWert + StrToFloat(Volt);
                   Liste.Free;
                 end;
            End;
        VoltWert := VoltWert / 60;
        MittelWert[h] := VoltWert;
      End;
  Closefile(TextDatei);
End;



Also... Mein Problem: Die Varriable "h" die einerseits oben in der ersten For-Schleife eingesetzt wird und andereseits unten in dem Array "MittelWert" scheint eigentlich normal zulaufen, wie mir über ein showMessage gezeigt wurde... Allerdings wird der VoltWert zusammen gezählt und nur in dem Array Feld 1 kommt eine sehr große Zahl raus, wo ich denke, dass er alles dort rein schmeist.... >.<

Danke im Vorraus :):):)


jaenicke - Mo 26.01.09 18:47

FileMode setzen kannst du dir sparen, wenn du ohnehin die Datei so zum Lesen öffnest.

So, zum Problem: überlege dir einmal was du tust. Beim ersten Durchlaufen der inneren Schleife bist du am Ende der Datei angelangt (while not Eof(TextDatei) do).
So, und in allen weiteren Durchläufen passiert doch gar nichts mehr. Schließlich bist du ja schon am Dateiende.

Mir ist nicht klar, warum du eigentlich so oft die Datei neu einlesen willst. :gruebel:


skall - Mo 26.01.09 18:55

Naja das Ding ist, dass ich da iwie versuche 600 Zeilen durchlaufen zu lassen und die erste Ziffer, die ich da über die Zeichen Kette raussonder zusammen rechnen will damit die abgespeichert wird als Stunden MIttelwert....

Hmm... ja oukey :o das könnte vieles erklären :D dann guck ich mir das ncohmal vom Grund auf an...


skall - Mo 26.01.09 19:01

hmmm... Danke für den tipp :D

Ich hätte mir viel vom Tag sparen können, hätte ich nur früher mal sowas gefragt -.-"
Funktioniert auf wundersamerweise plötzlich... ^^


jaenicke - Mo 26.01.09 19:07

Kleiner Tipp: Mit dem Debugger siehst du ja was das Programm macht. Wenn du also am Anfang einen Haltepunkt setzt (F5 oder Klick vor die Zeile) und dann, wenn das Programm dort ankommt, mit F8 zeilenweise durch das Programm gehst, dann hättest du gesehen, dass er eben die innere Schleife nur einmal bis zum Ende durchläuft. ;-)

Um dann nicht 600 Zeilen durchzugehen kann man eine Kopie der Testdatei ja zunächst etwas kürzen.

Zudem kannst du auch weitere Haltepunkte setzen und mit F9 immer bis zum jeweils nächsten springen.


delfiphan - Mo 26.01.09 19:48

Ich dachte ich hätte dir hier [http://www.delphi-forum.de/viewtopic.php?t=89645] geschrieben, wie man am einfachsten Zahlen aus einer Datei rausliest. :gruebel:


skall - Mo 26.01.09 20:03

da zickt er iwie rum :S

Hab das jetzt anders und da klappt es fast...