AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sortierung sortiert nicht richtig?!

Ein Thema von Delphi-Coder · begonnen am 2. Dez 2003 · letzter Beitrag vom 2. Dez 2003
Antwort Antwort
Delphi-Coder

Registriert seit: 8. Jan 2003
Ort: Greifswald / Stralsund
151 Beiträge
 
Delphi 7 Enterprise
 
#1

Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 08:25
Hallo DP'ler,

ich hab mir vom swissdelphicenter einen Algorithmus zum Sortieren eines StringGrids nach Spalten geholt! Hier ist der Link!
Das funktioniert auch ganz gut. Er soll ein StringGrid nach einer Spalte sortieren, in der verschiedene Zahlen stehen (1-stellig bis 4-stellig). Komischerweise setzt er die 2-stelligen Zahlen an das Ende (also hinter die 4-stellugen) des StringGirds!

Woran könnte das liegen? bzw. Wie kann ich das ändern?

Vielen Dank im voraus!

MfG
Delphi-Coder

P.S.: ich hab doch nochmal den Code eingefügt!

Delphi-Quellcode:
procedure SortStringGrid(var GenStrGrid: TStringGrid; ThatCol: Integer);
const
  // Define the Separator
  TheSeparator = '@';
var
  CountItem, I, J, K, ThePosition: integer;
  MyList: TStringList;
  MyString, TempString: string;
begin
  // Give the number of rows in the StringGrid
  CountItem := GenStrGrid.RowCount;
  //Create the List
  MyList := TStringList.Create;
  MyList.Sorted := False;
  try
    begin
      for I := 1 to (CountItem - 1) do
        MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
          GenStrGrid.Rows[I].Text);
      //Sort the List
      Mylist.Sort;

      for K := 1 to Mylist.Count do
      begin
        //Take the String of the line (K – 1)
        MyString := MyList.Strings[(K - 1)];
        //Find the position of the Separator in the String
        ThePosition := Pos(TheSeparator, MyString);
        TempString := '';
        {Eliminate the Text of the column on which we have sorted the StringGrid} 
        TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
        MyList.Strings[(K - 1)] := '';
        MyList.Strings[(K - 1)] := TempString;
      end;

      // Refill the StringGrid
      for J := 1 to (CountItem - 1) do
        GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
    end;
  finally
    //Free the List
    MyList.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Sort the StringGrid1 on the second Column
  // StringGrid1 nach der 1. Spalte sortieren
  SortStringGrid(StringGrid1, 1);
end;
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#2

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 08:36
Zitat von Delphi-Coder:
Er soll ein StringGrid nach einer Spalte sortieren, in der verschiedene Zahlen stehen (1-stellig bis 4-stellig).
Zahlen? Ein StringGrid kann nur Strings aufnehmen.

Zitat:
Komischerweise setzt er die 2-stelligen Zahlen an das Ende (also hinter die 4-stellugen) des StringGirds!
Wieso komisch?
Code:
1234
45
ist korrekt "alphabetisch" sortiert. Für Zahlen must Du wohl die Funktion umschreiben ...
  Mit Zitat antworten Zitat
Delphi-Coder

Registriert seit: 8. Jan 2003
Ort: Greifswald / Stralsund
151 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 08:54
Die Zahlen stehen natürlich schon als Strings in diesem StringGrid! Und das er eigentlich korrekt sortiert ist mir auch klar, aber wie kann ich die Funktion umschreiben, so das er numerisch sortiert?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:03
Wandel die Zeichenketten in Zahlen um und sortier die Zahlen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Tom

Registriert seit: 7. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:06
Zitat von Delphi-Coder:
Die Zahlen stehen natürlich schon als Strings in diesem StringGrid!
Ist schon klar. Anders geht es ja auch nicht. Ich wollte Dir nur erklären, dass die Funktion wohl schon richtig sortiert.

Zitat:
Und das er eigentlich korrekt sortiert ist mir auch klar, aber wie kann ich die Funktion umschreiben, so das er numerisch sortiert?
Packe führende Nullen für die Sotierung an die einzelnen Zahlen.
Code:
0045
1234
wäre das Ergebnis.

Ach ja: Nur für die Sortierung, nicht in der Anzeige ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:16
Ein Hallöle von http://www.FrankNStein.de/Smiley-Wolke.gif,

nach Zahlen sortieren => vorm/beim sortieren die Strings z.B. in Integer umwandeln.

Delphi-Quellcode:
Procedure SortStringGrid(SG: TStringGrid; SortCol: Byte; inclFixedCol: Boolean = True);
  Var FC, I, I2, I3, Z, Z2, C, C2: Integer;
    S: String;

  Begin
    If (SortCol >= SG.ColCount) or (inclFixedCol and (SortCol < SG.FixedCols)) Then Exit;
    If inclFixedCol Then FC := 0 Else FC := SG.FixedCols;
    For I := SG.FixedRows to SG.RowCount - 2 do
      For I2 := I + 1 to SG.RowCount - 1 do Begin
        Val(SG.Cells[SortCol, I], Z, C);
        Val(SG.Cells[SortCol, I2], Z2, C2);
        If ((C or C2 = 0) and (Z > Z2)) or
          ((C or C2 <> 0) and (SG.Cells[SortCol, I] > SG.Cells[SortCol, I2])) Then
          For I3 := FC to SG.ColCount - 1 do Begin
            S := SG.Cells[I3, I];
            SG.Cells[I3, I] := SG.Cells[I3, I2];
            SG.Cells[I3, I2] := S;
          End;
      End;
  End;
Delphi-Quellcode:
{inclusive der fixierten Spalten sortieren}
SortStringGrid(StringGrid1, Spalte);
SortStringGrid(StringGrid1, Spalte, True);

{fixierte Spalten nicht mit sortieren}
SortStringGrid(StringGrid1, Spalte, False);
wenn die Sortierreinfolge geändert werden soll - einfache die Vergleichsoperatoren austauschen (">", "<"):
Code:
[b]If[/b] ((C [b]or[/b] C2 = 0) [b]and[/b] (Z [color=red][b]>[/b][/color] Z2)) [b]or[/b]
  ((C [b]or[/b] C2 <> 0) [b]and[/b] (SG.Cells[SortCol, I] [color=red][b]>[/b][/color] SG.Cells...
[ADD]
Ach ja, diese Prozedur sortiert nicht die Überschrift (fixierte Zeilen) des StringGrids und wenn erwünscht auch nicht die fixierten Spalten.


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:20
Zitat von Tom:
Packe führende Nullen für die Sotierung an die einzelnen Zahlen.
Code:
0045
1234
wäre das Ergebnis.
Zeichenketten-Operationen sind mit das inperformanteste was es gibt in der Programmierung. Sprich, das dürfte wohl die schlechteste Lösung sein.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:24
[OT]
Ach Luckie, ich hab gelernt und meinen Code mal mit Val etwas optimiert.

Ich weiß nicht ob es CodeLib-tauglich ist, daher habe ich auch noch schnell den deutsch/englisch-mischmasch entfernt.
[/OT]


http://www.FrankNStein.de/Smiley-Kuss.gif * * http://www.FrankNStein.de/Smiley-Spinne.gif * * * http://www.FrankNStein.de/Smiley-Winken.gif
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Delphi-Coder

Registriert seit: 8. Jan 2003
Ort: Greifswald / Stralsund
151 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Sortierung sortiert nicht richtig?!

  Alt 2. Dez 2003, 09:37
Vielen Dank für eure Hilfe! Und sorry, wenn die Frage fast schon lächerlich war! Ich hab nur gerade keine Zeit um "das Rad neu zu erfinden" und dachte mir, dass schonmal jemand solch eine Prozedur geschrieben hat!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 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