Autor Beitrag
Barret
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Mi 09.02.05 11:54 
Hi!
Ich hab einen Sortieralgor. hir im forum gefunden und auf meine Bedürfnisse angepasst.

Jetzt siht der so aus:
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:
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 > 0and (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

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: 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.

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 09.02.05 12:29 
hi,

schreib halt mal überall ne 1 hin, wo jetzt ne 5 steht.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Barret Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: Mi 09.02.05 12:41 
Nur nachmal so wie der Code richtig sein muss ohne Fehler:
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:
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 > 0and (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

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.
OneOfTen
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 156
Erhaltene Danke: 1

Win XP
D7 Ent
BeitragVerfasst: 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.

_________________
Wir könnten ja, wenn wir wollten aber wir wollen ja nicht.
It´s not a bug, it´s a feature.