Entwickler-Ecke
Sonstiges (Delphi) - Sortieralgorythmus für StringGrid???
Barret - Mi 09.02.05 11:54
Titel: Sortieralgorythmus für StringGrid???
Hi!
Ich hab einen Sortieralgor. hir im forum gefunden und auf meine Bedürfnisse angepasst.
Jetzt siht der so aus:
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:
| procedure TForm1.StringGridsortieren1(Feld: TStringGrid); var i, j, aRow, iSortKey: integer; TempRows: TStrings;
begin TempRows := TStringList.Create;
with Feld do begin for aRow := 2 to ZugGrid.RowCount - 1 do begin iSortKey := StrToDate(ZugGrid.Cells[5, aRow]); i := aRow - 1; while (i > 0) and (StrToInt(Cells[5, i]) > iSortKey) do begin for j := 0 to ColCount - 1 do TempRows.Add(Cells[j, i + 1]); Rows[i + 1] := Rows[i]; [i] := TempRows; TempRows.Clear; dec(i); end; end; end; TempRows.Free; end; |
Der Algor. sortiert alle Zeilen (von Row = 1) bis zum Ende nach der Spalte 5 (Col = 5) aufsteigend. Das Heist, die kleinste Zahl steht oben und die größte unten.
Ich möchte das gern genau anders herum machen, hab aber nich so sehr viel ahnung von Algorythmen und steig da noch nich richtig durch. Desweiteren soll er die Erste Spalte nicht mitsortieren. Auch hirbei seh ich nicht an welcher Stelle ich den Integer einen höher setzen soll. :(
Kann mir da jemand behilflich sein???
mfg
uall@ogc - Mi 09.02.05 12:09
StrToInt(Cells[5, i]) > iSortKey
einfach nen < aus dem > machen dann sollte es gehen
aber änder mal auf das StrToDate in StrToInt ab, das kommt mir irgendwie komisch vor ;>
Barret - Mi 09.02.05 12:14
Danke.
Mit dem StrToDate muss ich vorhin wohl vergessen haben abzuändern (frei im Forum gemacht).
Wenn mir jetzt noch einer das mit der ersten Spalte sagen könnte wär ich wunschlos glücklich.
CenBells - Mi 09.02.05 12:29
hi,
schreib halt mal überall ne 1 hin, wo jetzt ne 5 steht.
Gruß
Ken
Barret - Mi 09.02.05 12:41
Nur nachmal so wie der Code richtig sein muss ohne Fehler:
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:
| procedure TFFVWMSimulieren.StringGridsortieren(Feld: TStringGrid); var i, j, aRow, iSortKey: integer; TempRows: TStrings;
begin TempRows := TStringList.Create;
with Feld do begin for aRow := 2 to RowCount - 1 do begin iSortKey := StrToInt(Cells[5, aRow]); i := aRow - 1; while (i > 0) and (StrToInt(Cells[5, i]) < iSortKey) do begin for j := 0 to ColCount - 1 do TempRows.Add(Cells[j, i + 1]);
Rows[i + 1] := Rows[i]; Rows[i] := TempRows; TempRows.Clear; dec(i); end; end; end; TempRows.Free; end; |
Wenn ich statt der 5 eine 1 hin schreib sortiert er das Grid doch nach der ersten Spallte und genau dass soll er ja nicht machen. Das er nach Spalte 5 sortieren lassen soll ist schon richtig. Er soll die erste Spalte des Grids aber ausen vor lassen und den "nicht" mitsortieren.
Oder muss ich den Inhalt der in den jeweiligen Cells[x, y] stehen soll neu (selber) schreiben lassen
Delete - Mi 09.02.05 13:08
Dein Code sortiert doch immer eine ganze Row. Meiner Meinung nach musst du da komplett etwas ändern, wenn du eine Spalte nicht mitsortieren möchtest.
Du könntest vorher die Spalte in einer Stringliste temporär speichern und hinterher wieder einfügen..
Barret - Mi 09.02.05 13:13
@ OneOfTen: Da muss ich dir follkommen zustimmen.
Den Algo. hab ich jetzt auch verstanden. :wink: Wegen dem "aRow" geht das nich aber dem hab ich auch schon abhilfe verschaffen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!