Delphi-PRAXiS

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

Kroko1999 17. Jun 2005 10:42

Re: Such Algorithmus(zweier Identischer Strings)
 
Sortierung ist an???
TStringlist+F1

leddl 17. Jun 2005 10:42

Re: Such Algorithmus(zweier Identischer Strings)
 
Also DownTo wäre auf jeden Fall schonmal praktischer... ;)

Pitch-Bull 17. Jun 2005 10:48

Re: Such Algorithmus(zweier Identischer Strings)
 
@Catbytes

Supi! Das funzt wunderbar. Danke dir!!! :thumb:

generic 17. Jun 2005 11:36

Re: Such Algorithmus(zweier Identischer Strings)
 
Zitat:

Zitat von leddl
Also DownTo wäre auf jeden Fall schonmal praktischer... ;)

yup, weil wenn du ein element entfernst wird die liste kleiner um ein element.
da count aber noch beim start ein element grösser war kommt deshalb die index-fehlermeldung.

also downto, dann ist der index schon vorbei, welchen du löscht.


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