Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas para borrar una cadena de un Tstrings (https://www.clubdelphi.com/foros/showthread.php?t=56135)

drykea 08-05-2008 10:41:10

Problemas para borrar una cadena de un Tstrings
 
Hola a todo el mundo.

Pues eso, tengo un problema para borrar una cadena en concreto dentro de un tstrings.
Lo que hago es:


Código Delphi [-]
for I := 0 to Cod.Count-1 do
begin
...
Cod.Delete(I);
...
end;





El problema es que me da 'List index of bounds'. Da igual el valor que tenga I.
¿Alguien sabe lo que estoy haciendo mal?
¿Hay otra manera de hacerlo?

Muchas gracias por su ayuda

roman 08-05-2008 10:54:19

En estos casos, debes recorrer la lista alrevés:

Código Delphi [-]
for I := Cod.Count-1 downto 0 do
begin
...
Cod.Delete(I);
...
end;

Edito

También puedes intentar poniendo simplemente

Código Delphi [-]
Cod.Clear;

en lugar del ciclo.

// Saludos

Dedalo 08-05-2008 11:04:46

Delphi toma el valor de I cuando se inicia el bucle. Si borras uno o mas elementos de la tabla, cuando I llega al valor inicialmente capturado Cod.Count-1 ya estas fuera de la tabla. Por ejemplo, tienes una tabla de 25 elementos, al inicio del bucle pascal determina que debe contar desde 0 hasta 24, si borras algun elemento de la tabla da igual, la cuenta llegará a 24, y como has borrado un elemento, cuando intentes borrar o comprobar el elemento num. 24 estas fuera de rango.

Lo mejor en esos casos es hacer un bucle While o Until.

Código Delphi [-]
I=0;
while I < Cod.Count do
begin
...
Cod.Delete(I);
...
inc(I);
end;

Código Delphi [-]
I=0;
repeat
...
Cod.Delete(I);
...
inc(I);
until I = Cod.Count;

Asi compruebas el valor de Cod.Count en cada pasada

drykea 08-05-2008 11:39:43

Muchas gracias por respoder tan pronto.

He probado las dos formas, recorrer la lista al reves y poner un while en vez de un for, y las dos han funcionado.

Una última pregunta ¿Que es más rápido el while o el for?

Delfino 08-05-2008 15:26:08

Cita:

El problema es que me da 'List index of bounds'.
Eso pq al borrar un elemento el valor de Cod.Count cambia,
Cita:

Una última pregunta ¿Que es más rápido el while o el for?
Son iguales las dos, o las tres :p

drykea 08-05-2008 15:30:31

Muchas gracia por todas sus respuestas.:D


La franja horaria es GMT +2. Ahora son las 18:35:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi