Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - stringlisten vergleichen - exception


the-kecks - Mi 22.04.09 20:45
Titel: stringlisten vergleichen - exception
hi,
ich habe ein programm geschrieben in dem 2 stringlisten verglichen werden und dann die einträge die in der stringlist "alt" fehlen in einer memo ausgibt. ich kriege an einer stelle immer die exception "listenindex überschreitet das maximum(2)".
hier der code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i2:=0 to neu.count-1 do
begin
 //hier liegt der fehler
 for i3:=0 to alt.count-1 do
 begin
   if pos(neu[i2], alt[i3]) >0 then neu.Delete(i2); //alle strings werden gefunden und deleted. danach kommt erst der fehler
 end;
end;
for i4:=0 to neu.count-1 do
memo1.lines.add(neu[i4]);


mfg


Zyklame - Mi 22.04.09 21:15

wenn du ein Item löschst wird die Liste kürzer, aber die Randbereiche der Schleife werden nach begin dieser nicht mehr aktuallisiert.

Um das Problem zu umgehen solltest du die Schleife Rückwärts durchlaufen dann tritt das Problem nicht auf.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
for i2:= neu.count-1 downto 0 do // Schleife Rückwärts durchlaufen
begin
 //hier liegt der fehler
 for i3:= 0 to alt.count-1 do
 begin
   if pos(neu[i2], alt[i3]) >0 then neu.Delete(i2); //alle strings werden gefunden und deleted. danach kommt erst der fehler
 end;
end;
for i4:=0 to neu.count-1 do
memo1.lines.add(neu[i4]);


Edit:
natürlich hat jaenicke recht
(hab nicht genau genug hingeschaut aus welcher liste gelöscht wird, habs korrigiert)


jaenicke - Mi 22.04.09 21:19

Die äußere Schleife muss rückwärts laufen, nicht die inneren. ;-)


the-kecks - Mi 22.04.09 21:41

danke an euch :)
jetzt funzt es!

mfg