Autor Beitrag
a.ebert
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 05.07.07 12:32 
Moin Delphi-Community!

Ich hab schon einige Beiträge zu diesem thema gelesen, aber allerdings nicht das gefunden wonach ich so richtig gesucht hab. Also ich beschreibs mal kurz:
Ich lese Daten einer Messung aus, speicher diese in einer Textdatei und anschließend lade ich diese Datei in eine StringList. Diese Daten sind nur einstellige Kommazahlen, die sowohl positiv als auch negativ sein können. Von diesen Daten (ca.1000) brauch ich den größten und den kleinsten Wert. Meine Überlegung war, die StringList mit Sort zu sortieren und dann den ersten und letzten Wert zu nehmen. Die sortierung der zahlen klappt soweit, nur das Vorzeichen wird ignoriert, quasi hab ich dann so eine Liste:
0
-0,1
0,1
-0,2
0,2

ABER richtig wäre ja:
-0,2
-0,1
0
0,1
0,2

Hat jemand eine Ahnung wie ich das realisieren kann? Gibts vielleicht eine andere Möglichkeit, die gewünschten werte zu erhalten? Oder muss ich die Daten wirklich erst in ein Array überführen, damit ich sie richtig sortieren kann?

MfG
Andy
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 05.07.07 12:35 
Wie sortierst du? Einfach Vergeliechsoperation neu implementieren

_________________
Markus Kinzler.
a.ebert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 05.07.07 12:50 
ich sortier mit Sort! hier mal ein stück Quellcode --> hoffe das hilft
ausblenden 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:
procedure TForm1.Button1Click(Sender: TObject);
var i,Position: Integer;
    Datei: TStringList;
    s: String;
    j: Double;
begin
 Datei:= TStringList.Create;
 try
    Datei.LoadFromFile('C:\Testfiles_1\test.txt');
    Datei.Duplicates:=dupIgnore;
    for i:=0 to Datei.Count-1 do
     begin
      s:=Datei.Strings[i];
      Position:=Pos(';',s);
      Delete(s,1,Position);
      Datei.Duplicates:=dupIgnore;
      Datei.Strings[i]:=s;
      j:=StrToFloat(Datei.Strings[i]);  //1,125E+1 in 11,25 umwandeln 
      Datei.Strings[i]:=FloatToStr(j);
    end;
   Datei.Sort;
   Label1.Caption:=max(Datei.Text);
   Datei.SaveToFile('C:\Test.txt');
  finally
   Datei.Free;
  end;
end;


Moderiert von user profile iconTino: Color- durch Highlight-Tag ersetzt.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 05.07.07 12:53 
Ich vermute da wirst du mit aTStringList.Sort nicht weit kommen. Da musst du einen eigenen Sortieralgorithmus implementieren ( Suche in: Delphi-Forum, Delphi-Library BUBBLESORT z.B. ). Bei diesem musst du nur die Einträge in der StringList in Integer umwandeln, dann vergleichen.
StringList.Sort sortiert alphabetisch, glaube ich, nicht numerisch.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Do 05.07.07 12:54 
JayEff hat recht.
Nur solltest du nicht in Integer sondern in Double oder so umwandeln, willst schließlich mit Komma-Zahlen arbeiten.

_________________
Anonymes Eckenkind
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Do 12.07.07 01:27 
Wenn du nur nach dem grössten und kleinsten Wert suchst, brauchst du die liste doch garnicht sortieren.
leg dir zwei variablen an - min, max
beide variablen initialisieren (min mit dem höchsten möglichen Messwert, max mit dem kleinsten möglichen)
dann in einer Schleife jede zeile mit Messwert auslesen, in einen Float wandeln und mit den beiden vars vergleichen.
var < min then min := var;
var > max then max := var;
dann hast du den grössten und kleinsten wert in den beidern variablen vorliegen.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
a.ebert Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Do 12.07.07 08:29 
Danke an alle die mir geholfen haben...hab mein Problem mit Hilfe dieser Ratschläge gelöst!

Super arbeiten mit euch!

MfG
Andy
Martin1966
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1068

Win 2000, Win XP
Delphi 7, Delphi 2005
BeitragVerfasst: Do 12.07.07 11:24 
Hallo! :wink2:

Gibt es einen besonderen Grund warum du eine TStringList verwendest obwohl du keine Strings darin verwaltest?

Lg, Martin

_________________
Ein Nutzer der Ecke ;-)