Hat wahrsch. nix mit dem Problem zu tun aber du machst vor der For-Schleife L.BeginUpdate, in der For-Schleife bei jedem Durchlauf L.BeginUpdate aber nur einmal nach der Schleife L.EndUpdate.
Ist das in der Schleife nicht überflüssig?
Zum Problem, kannst du dir nicht in einer weiteren For-Schleife mal den Inhalt von L ausgeben lassen?
Wenn da schon was fehlt liegts nicht am Memo sondern am füllen von L.
Ich würde mir vllt. einfach mal an versch. Stellen im Code den Stand der Dinge anzeigen lassen. Hat mit öfters schon geholfen, wenn ich einen gut versteckten logischen Fehler eingebaut hatte (soll jetzt nicht heißen, dass du einen solchen drin hast, kann gut auch was anderes sein).
P.S.: Hast du mal größere Beispiele durchgespielt? Ist wirklich immer nur der Vorletzte problematisch?
Danke, das mit dem BeginUpdate für L habe ich korrigiert.
Dein Hinweis mit der Anzeige von L und der Überprüfung im Allgemeinen war sehr gut, denn das Ergebnis ist, tadaa, dass das Array falsch sortiert wurde.
L ist nicht schuld, das Memo auch nicht
Soweit so schlecht, denn dieser Sortieralgo ist doch eigentlich richtig, oder?
Ich versteh' dann trotzdem nicht, warum er ausgerechnet eine Stinglist aus dem Array haut.
Vor dem Sortieren war der vorletzte Array-Eintrag (inkl. StringList) vorhanden, danach nicht mehr.
EDIT: PS: bei größeren txt-Sammlungen ist es das selbe Ergebnis :/
Delphi-Quellcode:
procedure Sortieren(Aufsteigend: Boolean);
var
E: TEntry;
i, j, max: Integer;
x, y: TDateTime;
begin
E.Msg := TStringlist.Create;
max := Length(Entries);
for i:=0 to max-1 do
for j:=0 to max-1 do
begin
DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
LongTimeFormat := 'hh:nn:ss.zzz';
if Aufsteigend = True
then
begin
x := StrToDateTime(Entries[i].DatumZeit);
y := StrToDateTime(Entries[j].DatumZeit);
end
else
begin
x := StrToDateTime(Entries[j].DatumZeit);
y := StrToDateTime(Entries[i].DatumZeit);
end;
if x > y then
begin
E := Entries[i];
Entries[i] := Entries[j];
Entries[j] := E;
end;
end;
E.Msg.Clear;
end;