Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Such Algorithmus(zweier Identischer Strings) (https://www.delphipraxis.net/47876-such-algorithmus-zweier-identischer-strings.html)

Pitch-Bull 17. Jun 2005 09:56


Such Algorithmus(zweier Identischer Strings)
 
:wiejetzt: Ich habe eine Listbox mit x Items. Nun will ich alle items (mit gleichem string) löschen... :wiejetzt:

Mein Code:
Delphi-Quellcode:
procedure TForm2.SpeedButton7Click(Sender: TObject);
var
I,A:integer;
begin
  for I:=0 to ListBox2.Count-1 do
      for A:=1 to ListBox2.Count do
        begin
          if ListBox2.Items.Strings[i]=ListBox2.Items.Strings[a] then
            begin

              ListBox2.items.Delete(ListBox2.ItemIndex);
            end;
       end;
end;
Der Compiler löscht zwar einen doppelten wert, jedoch müsste ich ein paar mal auf den Button drücken, damit er alle doppelten, dreifachen... Strings korrket löscht. Zudem bekomme ich immer eine Fehlermeldung, das der listenindex überschritten wird.

Diesmal würde mir auch ein link weiterhelfen, habe nämlich mal wieder nichts gefunden...
( :idea: Wissen ist zu wissen wo es steht... :idea: )->Also bin ich doof... :gruebel:

ste_ett 17. Jun 2005 10:02

Re: Such Algorithmus(zweier Identischer Strings)
 
Code:
for I:=0 to ListBox2.Count-1 do
  for A:=1 to ListBox2.Count do
Warum läufst du beim 2. von 1 bis Count? :)
I bis count-1

Pitch-Bull 17. Jun 2005 10:06

Re: Such Algorithmus(zweier Identischer Strings)
 
weil er ansonsten ja immer den ersten wert löscht! weil der erste wert in der listbox natürlich der wert der ersten list box ist.also löscht er die ganze tabelle, bzw. immer den ersten wert...verstehst du? also

ich habe definiert wenn a=i ist , dann lösche a
Also folgt, wenn ich bei beiden schleifen mit dem gleichen index anfange, löscht er immer alles!!
hoffe ich habe es verständlich ausgedrückt..

Kroko1999 17. Jun 2005 10:07

Re: Such Algorithmus(zweier Identischer Strings)
 
so läßt man schon keine doppelten Einträge zu
Delphi-Quellcode:
 
TStringList(Listbox.Items).Duplicates := dupIgnore;

Catbytes 17. Jun 2005 10:09

Re: Such Algorithmus(zweier Identischer Strings)
 
Zitat:

Zitat von Pitch-Bull
Mein Code:
for A:=1 to ListBox2.Count do
[...]
ListBox2.items.Delete(ListBox2.ItemIndex);

Machts *klick*?

Pitch-Bull 17. Jun 2005 10:14

Re: Such Algorithmus(zweier Identischer Strings)
 
@kroko
Zitat:

so läßt man schon keine doppelten Einträge zu
Quellcode: markieren
TStringList(Listbox.Items).Duplicates := dupIgnore;

damit funzt es leider nicht, weiß auch nicht warum...
Zitat:

Pitch-Bull hat folgendes geschrieben:
Mein Code:
for A:=1 to ListBox2.Count do
[...]
ListBox2.items.Delete(ListBox2.ItemIndex);
ne, es macht nicht klick!?! Also vielleicht versteh ich , was du mir damit sagen willst, aber ich denke, dass er je nur dann ein items löscht, wenn ListBox2.Items.Strings[i]=ListBox2.Items.Strings[a] ist...oder?

Kroko1999 17. Jun 2005 10:16

Re: Such Algorithmus(zweier Identischer Strings)
 
Zitat:

Zitat von Pitch-Bull
@kroko
Zitat:

so läßt man schon keine doppelten Einträge zu

TStringList(Listbox.Items).Duplicates := dupIgnore;

damit funzt es leider nicht, weiß auch nicht warum...
...

setzen bevor du die Listbox füllst und Sortierung an

Catbytes 17. Jun 2005 10:27

Re: Such Algorithmus(zweier Identischer Strings)
 
Zitat:

Zitat von Pitch-Bull
ne, es macht nicht klick!?!

OK - Angenommen ListBox1.Items.Count wäre 10

Jetzt beginnt die Schleife. Delphi geht immer von Count=10 aus.

Jetzt löscht Du aus der ListBox aber 3 Einträge.

Was meinst Du, was passiert, wenn Delphi jetzt an Position 8 ankommt? Da ist nix mehr, weil Du ja 3 weggelöscht hast, Delphi aber noch von Count = 10 ausgeht...

Pitch-Bull 17. Jun 2005 10:29

Re: Such Algorithmus(zweier Identischer Strings)
 
Liste der Anhänge anzeigen (Anzahl: 1)
@ kroko

ich hab deinen code beim formcreate geschrieben, aber dennoch schreibt er mir die doppleten einträge in die listbox.
ich kann mir das doch auch net erklären...

@ catbytes
nunja, wie soll ich das denn deiner meinung nach bewerkstelligen? Das ist doch nicht das eigentliche problem oder?
mit EOF vielleicht? (if Eof then exit??);

ich habe mal nen screenshot zur besseren dokumentation bereitgestellt.
die erste listbox ist "undbehandelt" (ohne meinen algorithmus) und die rechte listbox ist das resultat...

Catbytes 17. Jun 2005 10:41

Re: Such Algorithmus(zweier Identischer Strings)
 
Gegeben ist eine Listbox mit:
a
a
a
b
b
b

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Liste: TStringList;
begin
  Liste := TStringList.Create;
  Liste.Clear;
  Liste.Sorted := true;
  Liste.Duplicates := dupIgnore;
  Liste.AddStrings(ListBox1.Items);
  ListBox1.Clear;
  ListBox1.Items := Liste;
  Liste.Free;
end;
Ergebnis:
a
b


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Seite 1 von 2  1 2      

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