Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Items zweier ListBoxen vergleichen -> doppelte Items löschen (https://www.delphipraxis.net/25375-items-zweier-listboxen-vergleichen-doppelte-items-loeschen.html)

dopeline 5. Jul 2004 16:11


Items zweier ListBoxen vergleichen -> doppelte Items lösc
 
Hallo!

Ich habe 2 ListBoxen ich möchte in eine Suchroutine doppelte Einträge löschen: Wenn in ListBox1 ein Eintrag aus ListBox2 gefunden wird, soll er in ListBox1 gelöscht werden. Ich habe mir das so überlegt, aber es funktionier nicht (Listenindex überschreitet das Maximum):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,r:integer;
begin
 for i:=0 to ListBox2.Items.Count-1 do
  for r:=0 to ListBox1.Items.Count-1 do
   if ListBox2.Items.Strings[i]=ListBox1.Items.Strings[r] then
    ListBox1.Items.Delete(r);
end;
Vielleicht sollte ich dazusagen, dass in der ListBox2 weniger Einträge stehen, als in der ListBox1.

Hier ein Beispiel:

In der ListBox1 stehen 400 Einträge (Items)
In der ListBox2 stehen nur 100 Einträge
Alle Einträge aus der ListBox2, die auch in der ListBox1 vorhanden sind, sollen in der ListBox1 gelöscht werden.

Hat jemand einen Lösungsvorschlag?


Gruß, dopeline

SirThornberry 5. Jul 2004 16:29

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
arbeite einfach mit downto dann hast du das problem nicht mehr. Der fehler kommt zu stande weil du am Anfang der Schleife festlegst bis zu welchem Itemindex gesucht werden soll, aber in der Schleife verringert sich die Anzahl der Liste...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i,r:integer;
begin
for i:=ListBox2.Items.Count-1 downto 0 do
  for r:=ListBox1.Items.Count-1 downto 0 do
   if ListBox2.Items.Strings[i]=ListBox1.Items.Strings[r] then
    ListBox1.Items.Delete(r);
end;
[Edit]Mir ist grad noch so eingefallen das es "indexOf" bei TStrings gibt[/Edit]

roderich 5. Jul 2004 16:31

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
schau dir mal IndexOf an.

außerdem mußt du die 2. Schleife von ListBox1.Count-1 downto 0 laufen lassen, wenn du aus dieser ListBox1 Items löscht.

Roderich

Lefko 5. Jul 2004 16:32

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
Hm, sehr merkwürdig, das müsste eigentlich so gehen, ich kann keinen Fehler finden... :gruebel:

Koma-Code 5. Jul 2004 17:16

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
Probiers mal so:

Delphi-Quellcode:
var
 e : Integer;

begin
e := 0;
while e < ListBox1.Items.Count-1 Do
 begin
  If ListBox2.Items.IndexOf(ListBox1.Items.Strings[e]) <> -1 then
   begin
    ListBox1.Items.Delete(e);
   end
  else e := e+ 1;
 end;
end;

shmia 5. Jul 2004 17:19

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
siehe Code-Library: Mengenoperationen mit Stringlisten

dopeline 5. Jul 2004 18:32

Re: Items zweier ListBoxen vergleichen -> doppelte Items
 
Ich habe es mit SirThornberrys Code versucht. Es funktioniert!

Vielen Dank euch allen für eure hilfe!


Gruß, dopeline


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz