![]() |
AW: Memo lässt Zeilen verschwinden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
EDIT: User/Datum = String und Nachricht TStringlist. Ich habe die Problematik kurz skizziert (s. Anhang). Danke und viele Grüße, aphexx |
AW: Memo lässt Zeilen verschwinden
das war ein Mißverständnis,
Sind die Daten im Array vorhanden? Wenn ich Deinen anhang richtig verstehe, dann fehlen die Daten in der Anzeige und sind in der/den Datei(en) vorhanden. Gruß K-H |
AW: Memo lässt Zeilen verschwinden
Jo, alle Daten sind im Array und die Anzeige im Memo ist fehlerhaft.
|
AW: Memo lässt Zeilen verschwinden
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? |
AW: Memo lässt Zeilen verschwinden
Zitat:
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; |
AW: Memo lässt Zeilen verschwinden
BubbleSort? Die äußere Schleife High-1 oder in Deinem Fall
Delphi-Quellcode:
.
for i:=0 to max-2 do
oder war es die innere? Für TStringList würde ich aber ganz klar die Methode CustomSort verwenden. ![]() |
AW: Memo lässt Zeilen verschwinden
Zitat:
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:=Low(Entries) to High(Entries) do for j:=Low(Entries) to High(Entries)-1 do begin DateSeparator := '.'; ShortDateFormat := 'dd.mm.yyyy'; LongTimeFormat := 'hh:nn:ss.zzz'; if Aufsteigend = True then begin x := StrToDateTime(Entries[j].DatumZeit); y := StrToDateTime(Entries[j+1].DatumZeit); end else begin x := StrToDateTime(Entries[j+1].DatumZeit); y := StrToDateTime(Entries[j].DatumZeit); end; if x > y then begin E := Entries[j]; Entries[j] := Entries[j+1]; Entries[j+1] := E; end; end; E.Msg.Clear; end; |
AW: Memo lässt Zeilen verschwinden
Weiß den Fehler auch nicht, möchte aber mal wieder bei dir Aufräumen: ;-)
Zitat:
2. Irgendwie sieht mir der Sortieralgorhytmus noch komisch aus. Setzt doch einfach mal einen anderen um, z.B. SelectionSort, oder so. Just my 2 ct. |
AW: Memo lässt Zeilen verschwinden
wie wäre es statt des Arrays eine Tlist zu verwenden?
Da gibt es eine funktionierende Sortierung. Gruß K-H |
AW: Memo lässt Zeilen verschwinden
Zitat:
Nach ein wenig Recherche sieht meine TListSortCompare so aus:
Delphi-Quellcode:
@Jumpy: Danke für's aufräumen, ich habs umgesetzt. :-D
function Dh_CompareDateB(Item1, Item2: pointer):integer;
var X, Y: TDateTime; begin x := StrToDateTime(PEntry(Item1).DatumZeit); y := StrToDateTime(PEntry(Item2).DatumZeit); if (X < Y) then Result := 1 else if (X = Y) then Result := 0 else Result := -1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:01 Uhr. |
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