Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-05-2008
drykea drykea is offline
Miembro
 
Registrado: abr 2007
Posts: 113
Poder: 17
drykea Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 08-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 08-05-2008 a las 11:57:25.
Responder Con Cita
  #3  
Antiguo 08-05-2008
Avatar de Dedalo
Dedalo Dedalo is offline
Miembro
 
Registrado: abr 2008
Ubicación: Albacete (España)
Posts: 32
Poder: 0
Dedalo Va por buen camino
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

Última edición por Dedalo fecha: 08-05-2008 a las 12:08:19.
Responder Con Cita
  #4  
Antiguo 08-05-2008
drykea drykea is offline
Miembro
 
Registrado: abr 2007
Posts: 113
Poder: 17
drykea Va por buen camino
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?
Responder Con Cita
  #5  
Antiguo 08-05-2008
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
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
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #6  
Antiguo 08-05-2008
drykea drykea is offline
Miembro
 
Registrado: abr 2007
Posts: 113
Poder: 17
drykea Va por buen camino
Muchas gracia por todas sus respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas para borrar registro jlalvarez PHP 2 12-11-2007 23:49:50
Funcion para borrar la cadena que aparesca repetida dentro de otra cadena flystar Varios 1 03-07-2007 00:51:10
Funcion para buscar cadena dentro de otra cadena y el numero de veces flystar Varios 3 02-07-2007 23:48:08
Problemas con TStrings 1501 OOP 2 19-11-2004 04:36:04
Borrar caracteres de una cadena jymy788 Varios 2 29-10-2004 13:36:11


La franja horaria es GMT +2. Ahora son las 20:49: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
Copyright 1996-2007 Club Delphi