![]() |
Quitar dos espacios en cadena dejar uno
Saludos, quisiera saber como puedo hacer para limpiar una cadena que tiene muchos espacios, o sea dejar solo uno
Una cadena como esta Código:
'70224637 444 54666 4 4512 4 5 4 50 ' Código:
'70224637 444 54666 4 4512 4 5 4 50 ' |
Yo tengo esto:
Ni idea de si es lo más optimo. De hecho ni recuerdo si es mio o lo copié de algún lado. Otra opción en: http://texthandler.com/?module=remov..._spaces_delphi Aunque no creo que sea mucho mas eficiente. O adaptar este código de c#, bastante similar al mío: Código:
while (text.IndexOf(" ") != -1) |
A ver si ésta (recorre una sóla vez la cadena):
// Saludos |
Hola.
Otra opción:
Saludos :) |
Muchas gracias a todos, me sirvio un moton
|
Esa es una forma destructiva (borrando). Otra manera es construir una nueva cadena, y cuando hay un espacio agregar el primero e ignorar los que vengan.
|
Cita:
Saludos :) |
Hola ecfisa,
Esta última versión se ve mucho mejor pero me queda la duda de si no falla cuando la cadena termina en espacios. Por otro lado, no entiendo el uso de SetLength. pd: buena observación de mamcx, ya que borrar un caracter implica el reacomodo del resto de la cadena. // Saludos |
Hola roman.
Cometí un error de copia/pega de una de las varias pruebas,de ahí el SetLength :o. (Aunque acabo de hacerle unas comprobaciones e igual funciona con espacios sobre el final) Debería haber sido esta:
Saludos :) |
También se puede hacer una función recursiva, pero como se pide que sea lo más eficiente posible, habría que probar si la recursividad es más eficiente que el bucle :)
|
Otra opcion, esta vez en asm:
Saludos. |
Cita:
// Saludos |
Cita:
// Saludos |
Cita:
¿Alguien se anima a probar y calcular el tiempo con cada opción? |
Cita:
Por otra parte, si usa una versión de Delphi que tenga expresiones regulares yo las usaría sin pestañear :) Por ejemplo, en php: Código PHP:
|
Cita:
De tanto escudriñar, también me encontré con una situación que no entiendo... Haciendo, obtengo el resultado que me esperaba: ![]() Sin embargo si hago, obtengo este resultado: ![]() :confused: Saludos :) |
Cita:
// Saludos |
Cita:
// Saludos |
Cita:
// Saludos |
Cita:
Pero contra toda predicción, no hubo advertencia ni errores al acceder a una posición mas allá del valor de Length, eso me dejó con dudas e hice múltiples pruebas sin lograr que se produzca advertencia o error alguno. De ahí que atribuí que obtenía ese resultado por tratar con un AnsiString. Realmente siempre puse cuidado en no acceder a una posición mayor al largo de una cadena pensando en que generaría un error, pero todas las pruebas realizadas hasta ahora me indican que, al menos acceder (lectura) a una posición mas del valor devuelto por Length de un AnsiString no genera error. ¿ Conoces algún caso en que se produzca ? Saludos :) |
La franja horaria es GMT +2. Ahora son las 04:34:47. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi