Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi "nummerierung" bei TStrings (https://www.delphipraxis.net/22423-nummerierung-bei-tstrings.html)

glkgereon 17. Mai 2004 16:45


"nummerierung" bei TStrings
 
hi
ich hab eine procedure, in der ist unter anderem folgende schleife drin
die soll das abgleichen von zwei TStrings erledigen

Delphi-Quellcode:
for i:=0 to Data1.Count-1 do
   Begin
   If Data1.IndexOf(Data2.Strings[i])=-1
   Then Data2.Delete(i);
   End;
ich hab mir das so gedacht:
data2 beinhaltet alles, data1 nur teile der daten

er geht jedes element durch
wenn es in data1 nicht enthalten ist (-1) dann soll ers löschen

damit er nicht über den rand läuft, läuft er nur bis data1.count-1

aber es kommt zu der fehlermeldung

"ungültiger index (2)" (oder so ähnlich, jedenfalls die klassische meldung für einen overflow)

wo ist mein denkfehler, oder spinnt mein delphi?

ich weiss nämlich absolut nicht weiter :gruebel:

IngoD7 17. Mai 2004 16:56

Re: "nummerierung" bei TStrings
 
Abgesehen davon, dass du es m.E. (auch) von der Logik her schon nicht richtig machst, ist es so, dass du während der i-Schleife aus Data2 Elemente herauslöscht. Die Elemente und Indexe in Data2 rutschen entsprechend runter, die Variable i wird aber immmer weiter hochgezählt. Wenn nun genug gelöscht wird, so ist i irgendwann größer als du noch Elemente in Data2 hast.

sakura 17. Mai 2004 16:57

Re: "nummerierung" bei TStrings
 
Gehe die Schleifew einfach rückwärts durch.

Delphi-Quellcode:
for I := Data1.Count-1 downto 0 do
  ...
...:cat:...

IngoD7 17. Mai 2004 17:01

Re: "nummerierung" bei TStrings
 
Zitat:

Zitat von sakura
Gehe die Schleifew einfach rückwärts durch.

Ist logisch trotzdem falsch. Wenn Data1 12 Elemente hat und Data2 derer 16, so werden nur die Data2-Elemente 0 bis 11 überprüft, ob sie in Data1 vorhanden sind. Die Data2-Elemente 12-15 bleiben völlig unberücksichtigt.

glkgereon 17. Mai 2004 17:13

Re: "nummerierung" bei TStrings
 
:wall: :wall: :wall:

hätt man drauf kommen können....

mist

naja, thx

gut das ihrs gesehen habt :thuimb:


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