Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler im Sortier-Algorythmus (https://www.delphipraxis.net/31323-fehler-im-sortier-algorythmus.html)

gordon freeman 7. Okt 2004 15:43

Re: Fehler im Sortier-Algorythmus
 
@ shmia
Tut mir leid, das was du schreibst macht sicherlich alles Sinn, aber ich check gar nix :drunken:

@ alcaeus:
Hier ein paar Beispiele:

26-01-02
15-07-01
20-04-02
11-08-01
03-11-01
28-07-01
16-03-02


Das sind die 7 Einträge, die ich in meiner Listbox hab und die es zu sortieren gilt...
Hoffe auf Hilfe...


read you, Martin

alcaeus 7. Okt 2004 16:05

Re: Fehler im Sortier-Algorythmus
 
Hi Martin,

ich habe mir Daniels Prozedur aus dem Sortieralgorithmen-Tut ausgeliehen, und die Funktion ein bisschen umgeschrieben. Jetzt werden die Daten absteigend sortiert:
Delphi-Quellcode:
procedure TForm1.NewBubbleSort(tStr: TStrings);
var i, j, n : Integer;
    tag1, monat1, jahr1, tag2, monat2, jahr2: integer;
    Data: array of String;
    s, temp: String;
begin
  SetLength(Data, tStr.Count);
  for i := 0 to tStr.Count-1 do
    Data[i] := tStr[i];
  n := tStr.Count-1;
  for i:= n downto 1 do
  begin
    for j:= 1 to i do
    begin

      s:=Data[j];
      delete(s,1,pos('-',s));
      delete(s,1,pos('-',s));
      jahr1:=strtoint(s);

      {Der Monat wird aus 1 herausgeschnitten}
      s:=Data[j];
      delete(s,1,pos('-',s));
      delete(s,pos('-',s),length(s));
      monat1:=strtoint(s);

      {Der Tag wird aus 1 herausgeschnitten}
      s:=Data[j];
      delete(s,pos('-',s),length(s));
      tag1:=strtoint(s);

      {Das Jahr wird aus 2 herausgeschnitten}
      s:=Data[j-1];
      delete(s,1,pos('-',s));
      delete(s,1,pos('-',s));
      jahr2:=strtoint(s);

      {Der Monat wird aus 2 herausgeschnitten}
      s:=Data[j-1];
      delete(s,1,pos('-',s));
      delete(s,pos('-',s),length(s));
      monat2:=strtoint(s);

      {Der Tag wird aus 2 herausgeschnitten}
      s:=Data[j-1];
      delete(s,pos('-',s),length(s));
      tag2:=strtoint(s);

      {Jahr vergleichen}
      if jahr1 > jahr2 then
      begin
        temp := Data[j-1];
        Data[j-1] := Data[j];
        Data[j] := temp;
      end;
      if jahr1 = jahr2 then
      begin
        if monat1 > monat2 then
        begin
          temp := Data[j-1];
          Data[j-1] := Data[j];
          Data[j] := temp;
        end;
        if monat1 = monat2 then
        begin
          if tag1 > tag2 then
          begin
            temp := Data[j-1];
            Data[j-1] := Data[j];
            Data[j] := temp;
          end;
        end;
      end;
    end;
  end;
  for i := 0 to tStr.Count-1 do
    ListBox2.Items.Add(Data[i]);
end;
Hoffe es passt.

Greetz
alcaeus

gordon freeman 7. Okt 2004 16:40

Re: Fehler im Sortier-Algorythmus
 
@ alcaeus
Super der Code funzt perfekt :thumb:

Allerdings hab ich noch eine Frage:

Bei mir zeigt er das neueste Datum als erstes und das älteste als letztes an. Gibt es eine Möglichkeit das schnell umzudrehen, ohne vorher alles in eine gesonderte Liste zu exportieren und wieder falsch herum zu imortieren?

Vielen Dank auf jeden Fall soweit. :cheers:
:bouncing4: :bounce2: :bounce1: :bouncing4: :bounce2: :bounce1:

alcaeus 7. Okt 2004 16:42

Re: Fehler im Sortier-Algorythmus
 
Hi Martin,

Zitat:

Zitat von gordon freeman
Bei mir zeigt er das neueste Datum als erstes und das älteste als letztes an. Gibt es eine Möglichkeit das schnell umzudrehen, ohne vorher alles in eine gesonderte Liste zu exportieren und wieder falsch herum zu imortieren?

Also, du kannst entweder jedes > im Code durch < ersetzen, oder du änderst diesen Code
Delphi-Quellcode:
for i := 0 to tStr.Count-1 do
    ListBox2.Items.Add(Data[i]);
in
Delphi-Quellcode:
for i := tStr.Count-1 downto 0 do
    ListBox2.Items.Add(Data[i]);
um.

Greetz
alcaeus

Nikolas 7. Okt 2004 16:43

Re: Fehler im Sortier-Algorythmus
 
Ich glaube du musst nur die '>' in '<' umdrehen.

gordon freeman 7. Okt 2004 17:24

Re: Fehler im Sortier-Algorythmus
 
Mit '<' statt '>' sortiert er sie mir richtig.

Vielen Dank für Eure Hilfe!!!

:thumb: :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:26 Uhr.
Seite 2 von 2     12   

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