![]() |
Doppelte Zeilen aus einem TMemo löschen
Hallo liebe Delphiler,
Kaum ist der erste Teil meiner Frage gelöst, taucht ein weiterer auf - Ich möchte in meinem Memo, dass pro Zeile mit einer ID gefüllt ist, die doppelten / dreifachen / zehnfachen gleichen Zeilen entfernen - z.B.: id=be1aaeaa40859fa5 id=f88d479ad888c8a0 id=f88d479ad888c8a0 id=b0498dcaf0b70f04 id=b0498dcaf0b70f04 id=a143e956ca7ad9ac id=a143e956ca7ad9ac id=be1aaeaa40859fa5 id=235b0e8cd726ff5f id=a35f1c800d72558f id=e36734d9530e6bc0 id=e36734d9530e6bc0 id=d2a331de7c42825f id=d2a331de7c42825f id=5076c8e1d3141bde Was - so glaube ich - irgendwie mit einer Schleife möglich sein sollte, ich bin allerdings komplett planlos, mit welchen Kommandos ich das bewerkstelligen kann. Habe leider auch keine Beispiele bei Google gefunden, aber es sollte ja schon eine Delphi-interne Möglichkheit geben, doppelte Strings zu vergleichen und dann solange zu löschen, bis nurnoch einer da ist!? Würde mich riesig über Hilfe freuen, - M.S. |
Re: Doppelte Zeilen aus einem TMemo löschen
Delete, IndexOf
|
Re: Doppelte Zeilen aus einem TMemo löschen
Hallo,
so könnte es auch ohne Schleifen gehen:
Delphi-Quellcode:
Grüße
var
sl: TStringList; sl := TStringlist.create; sl.sorted := true; sl.duplicates := dupIgnore; sl.assign(Memo1.lines); Memo1.lines.assign(sl); sl.free; Klaus |
Re: Doppelte Zeilen aus einem TMemo löschen
Hallo,
hier noch ein In-Place-Ansatz:
Delphi-Quellcode:
Und wenn der Parameter immer "id" heißt, dann würde ich in AddToList() den Url-Präfix noch etwas erweitern:
procedure KillDuplicates(s: TStrings);
var iLow, iHigh: integer; begin for iLow := 0 to s.Count - 2 do for iHigh := Pred(s.Count) downto Succ(iLow) do if s[iLow] = s[iHigh] then s.Delete(iHigh); end;
Delphi-Quellcode:
Es werden dann nur die Codes eingetragen.
const
PFX = 'http://www.webseite.de/profile.php?id='; Freundliche Grüße |
Re: Doppelte Zeilen aus einem TMemo löschen
Hallo,
Vielen Dank für die zahlreichen Antworten, sie haben mir alle weitergeholfen! Marabu, mein Lebensretter! Mit deinem Vorschlag läuft das Ganze am aller, aller schnellsten und Besten. (Sind teilweise 900 Einträge, mit deinem Beispiel läuft das Ganze durch wie Butter!) Du bist echt genial! - Max |
Re: Doppelte Zeilen aus einem TMemo löschen
Max, du übertreibst schamlos.
Es geht noch schneller, falls du vergessen haben solltest, während der Ausführung von KillDuplicates() die Aktualisierung der Memo.Lines abzuschalten:
Delphi-Quellcode:
Freundliche Grüße
begin
Memo.Lines.BeginUpdate; KillDuplicates(Memo.Lines); Memo.Lines.EndUpdate; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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