Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Werte aus Spalten berechnen (https://www.delphipraxis.net/137878-werte-aus-spalten-berechnen.html)

aaaaaaaaaa_10 30. Jul 2009 06:39


Werte aus Spalten berechnen
 
Hallo,
ich möchte aus einer Datei mit Spalten (s0,s1,...) Minimum, Maximum und Mittelwert der Spalte berechnen. Die Werte kommen aus dem StringArray[s,z]. Mini habe ich zu Beginn auf 1000000 gesetzt und temp auf 0. Nun dachte ich mir folgendes :

Delphi-Quellcode:
var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 : string;
Delphi-Quellcode:
procedure TMomFiles.WerteBerechnen;
var temp1 : real;
    i : integer;
begin
    begin
      temp1 := StrToFloat(StringArray[s,z]);
    //Minimum
      while (temp1 < Mini) do
      Mini := temp1;
    //Maximum
      while (temp1 > Maxi) do
      Maxi := temp1;
    //Mittelwert
      testtemp := testtemp+temp1;
      Avr := (testtemp)/(z+1);
      case s of
        0 : s0 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        1 : s1 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        2 : s2 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        3 : s3 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        4 : s4 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        5 : s5 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        6 : s6 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        7 : s7 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        8 : s8 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        9 : s9 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        10 : s10 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        11 : s11 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
        12 : s12 := FloatToStr(Mini)+#9+FloatToStr(Maxi)+#9+FloatToStr(Avr);
      end;
    end;
end;
Das Problem, im Moment vergleicht er alle Werte und nicht nur die Spaltenwerte miteinander und ich weiß nicht, wie ich das ummodeln kann. Ich kann/muss doch nicht für jede case Anweisung Minimum, MAximum und Mittelwert Code einfügen?!

jaenicke 30. Jul 2009 06:52

Re: Werte aus Spalten berechnen
 
Im Moment sehe ich da gar keinen Zugriff auf die anderen Werte, du greifst da doch nur auf eine Zelle (StringArray[s, z]) zu. Und deine while-Schleifen können ja nur einmal durchlaufen, machen aber gar nix, da darin nur eine Zuweisung ausgeführt wird, die sofort die while-Bedingung falsch werden lässt. :gruebel:

Was du machen müsstest ist doch eigentlich in einer for-Schleife jeweils deine Spalte durchzugehen und die Werte jeweils mit den aktuellen Min-/Max-Werten zu vergleichen und ggf. zuzuweisen.
Ja, und eben den Mittelwert zu berechnen, wie du es ja auch schon drin hast.

Oder hast du da die Schleife selbst weggelassen (begin..end wäre ja da...)?

aaaaaaaaaa_10 30. Jul 2009 06:56

Re: Werte aus Spalten berechnen
 
Die Schleife kommt aus ner anderen Prozedur

Delphi-Quellcode:
z := Zeilenanzahl-1;
            begin;
              for s := 0 to Spaltenanzahl-2 do
              begin
                StringArray[s,z] := ZwSpeicher.Strings[s+2];
                WerteBerechnen;
                Temp := (StringArray[s,z]) + ';';
                TestDatei.Write(PChar(Temp)^,Length(Temp));

              end;
             StringArray[Spaltenanzahl-1,z] := ZwSpeicher.Strings[ZwSpeicher.Count-1];
             WerteBerechnen;
             Temp := (StringArray[Spaltenanzahl-1,z]) + #13#10;
             TestDatei.Write(PChar(Temp)^,Length(Temp));
            end;

jaenicke 30. Jul 2009 07:06

Re: Werte aus Spalten berechnen
 
Also wenn du die Berechnung mit Hilfe von globalen Variablen (s, z, ...) so verteilst, dann wundert mich das überhaupt nicht, dass du da Probleme bekommst...
Wie soll man da den Überblick behalten? :shock:

Statt der while-Schleifen aus dem ersten Quelltext kannst du dann einfach if-Abfragen benutzen.
Wofür eigentlich die ganzen Stringvariablen s0 bis s12? Wie wäre es z.B. mit einem Array?

Und was da (falsch) läuft, müsstest du eigentlich im Debugger sehen, das ist von außen viel schwerer nachzuvollziehen...
Was komisch ist: Du hast eine for-Schleife mit s, gleichzeitig verwendest du s aber in WerteBerechnen. for-Schleifenvariablen müssen aber lokale Variablen sein...
Kann es sein, dass du s zweimal deklariert hast? Einmal lokal und einmal global? So dass das s in WerteBerechnen gar nicht die Werte hat, die du erwartest?

Es wäre vielleicht am sinnvollsten das Projekt einmal anzuhängen wie es jetzt ist, denn so ist es ziemlich schwer zu sehen was da wie abläuft. :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz