AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Items zweier ListBoxen vergleichen -> doppelte Items löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Items zweier ListBoxen vergleichen -> doppelte Items löschen

Ein Thema von dopeline · begonnen am 5. Jul 2004 · letzter Beitrag vom 5. Jul 2004
Antwort Antwort
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#1

Items zweier ListBoxen vergleichen -> doppelte Items lösc

  Alt 5. Jul 2004, 17:11
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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 17:29
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]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
roderich
(Gast)

n/a Beiträge
 
#3

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 17:31
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
  Mit Zitat antworten Zitat
Lefko

Registriert seit: 31. Jul 2003
359 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 17:32
Hm, sehr merkwürdig, das müsste eigentlich so gehen, ich kann keinen Fehler finden...
Johannes
-=[Nennst du meinen Namen, bin ich schon nicht mehr da]=-
  Mit Zitat antworten Zitat
Koma-Code
(Gast)

n/a Beiträge
 
#5

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 18:16
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;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 18:19
siehe Code-Library: Mengenoperationen mit Stringlisten
Andreas
  Mit Zitat antworten Zitat
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Items zweier ListBoxen vergleichen -> doppelte Items

  Alt 5. Jul 2004, 19:32
Ich habe es mit SirThornberrys Code versucht. Es funktioniert!

Vielen Dank euch allen für eure hilfe!


Gruß, dopeline
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 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