Autor Beitrag
the-kecks
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Mi 22.04.09 20:45 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41
Erhaltene Danke: 1

Win 7 Professional
Delphi XE, Visual Studio 2010
BeitragVerfasst: 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.

ausblenden 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)


Zuletzt bearbeitet von Zyklame am Mi 22.04.09 21:26, insgesamt 2-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 22.04.09 21:19 
Die äußere Schleife muss rückwärts laufen, nicht die inneren. ;-)
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Mi 22.04.09 21:41 
danke an euch :)
jetzt funzt es!

mfg