Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringList - doppelte Einträge vermeiden (https://www.delphipraxis.net/42827-stringlist-doppelte-eintraege-vermeiden.html)

Gambit 24. Mär 2005 11:24


StringList - doppelte Einträge vermeiden
 
Hallo,

folgender Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenPictureDialog1.Execute then
    aList.Add(OpenPictureDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
var i: Integer;
s   : String;
begin
  for i:= 0 to aList.Count-1 do
    s:= s+aList.Strings[i]+#10#13;
  showMessage(s);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  aList:= TStringList.Create;
  aList.Duplicates:= dupIgnore;
end;
durch das setzen der Property aList.Duplicates:= dupIgnore soll eigentlich das Einfügen von bereits vorhandenen Strings vermieden werden. Funzt aber nicht. Was ist falsch?

Gruß

Gambit

roderich 24. Mär 2005 11:27

Re: StringList - doppelte Einträge vermeiden
 
laut Delphi-Hilfe muß die property Sorted auf true gesetzt sein, damit Duplicates überhaupt greift.

Roderich

Gambit 24. Mär 2005 11:29

Re: StringList - doppelte Einträge vermeiden
 
Danke!

sECuRE 24. Mär 2005 11:30

Re: StringList - doppelte Einträge vermeiden
 
Hi,

ich kenn die Eigenschaft nicht, die du hier verwenden willst. Ich würd das "per Hand" machen:
Delphi-Quellcode:
function CheckIfDouble(const entry: string; var list:TStringList; case_sensitive: boolean):boolean;
var c:integer;
begin
for c:=0 to (list.count-1) do
  if ((list.strings[c] = entry) and case_sensitive) or ((lowercase(list.strings[c]) = lowercase(entry)) and (not case_sensitive)) then begin
    result:=true;
    break;
  end;
result:=false;
end;

// Stelle, an der hinzugeüfgt wird
procedure AddItem(item: string);
begin
if (not CheckIfDouble(item, aList, false)) then
  aList.Add(item);
end;
Vielleicht hilft dir das ja weiter ;)

cu

Steve 24. Mär 2005 11:32

Re: StringList - doppelte Einträge vermeiden
 
Hi,

ansonsten kannst Du vor dem Delphi-Referenz durchsuchenAdd auch mit Delphi-Referenz durchsuchenIndexOf prüfen, ob der Eintrag bereits vorhanden ist (ähnlich wie dieses "CheckIfDouble" nur einfacher :zwinker: ).

Gruß
Stephan :dance:

sECuRE 24. Mär 2005 11:34

Re: StringList - doppelte Einträge vermeiden
 
Hi,

IndexOf erlaubt aber keine Unterscheidung zwischen Groß-/Klein-Schreibung, oder?

cu

Gambit 24. Mär 2005 11:40

Re: StringList - doppelte Einträge vermeiden
 
Ja, ich hatte zunächst auch überlegt es per hand zu machen aber

Delphi-Quellcode:
aList.Duplicates:= dupIgnore;
funzt sehr gut, warum sollte ich es dann nicht nehmen. Da die Listen sehr klein sind sollte es auch keine Geschwindigkeitsnachteile durchs vorherige Sortieren geben...

Steve 24. Mär 2005 11:42

Re: StringList - doppelte Einträge vermeiden
 
Hi,

² secure: stimmt. :mrgreen:
² gambit: hätte ja sein könne, dass die Liste nicht sortiert werden soll :)

Gruß
Stephan :dance:

LoL 24. Mär 2005 11:54

Re: StringList - doppelte Einträge vermeiden
 
Du köntest ja auch die Add Methode überschreiben und vorher überprüfen ob der eintrag vorhanden ist!


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 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