FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Reemplazar "solo palabras completas"
Hola.
Para hacer un reemplazo de texto utilizo la función StringReplace. Pero quiero hacerlo de forma que solo reemplace en el caso de que aparezca la palabra completa y no cuando hay más texto en la palabra. Por ejemplo, si se reemplaza 'abc' por '123' en este texto 'abc abcd aabcc', busco la forma de conseguir que el resultado sea '123 abcd aabcc' en lugar de '123 123d a123c'. El resultado que quiero obtener, no se puede conseguir con StringReplace. ¿Alguien conoce la forma de hacerlo?. Aclaro que busco una solución de código (si se puede, claro) antes que la instalación de un componente. Gracias de antemano. |
#2
|
||||
|
||||
Puedes hacerlo controlando la posición de la palabra a reemplazar en el texto, si es la posición 1 (inicio de la línea) tienes que controlar además que después de la palabra hay un espacio. Si la posición es al final (chequeas que después hay un #13#10 y delante hay un espacio) también la reemplazarías. Lo demás queda igual, si no está en el principio de la línea ni al final entonces tendrás que comprobar que tiene un espacio delante y otro detrás.
Ahora te dejo el reto que lo hagas
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
Gracias por tu respuesta, Casimiro.
Hago un pequeño añadido que no tuve en cuenta en mi primer mensaje. La utilidad se usaría para reemplazar nombres de constantes de texto en el código de un programa delphi. Lo cual pienso que complica las cosas un poco, porque además de espacios en blanco y caracteres de fin de línea, pueden aparecer "=", ")", "(", "+", etc... Si conociera todas las posibilidades que hay de caracteres antes y después de la aparición de la palabra (que realmente sería una constante de texto), creo que podría hacer la función que efectuara el reemplazo. Voy a poner las posibilidades que se me ocurren: "espacio en blanco" + ( ) ; , = [ ] ¿Alguien alguna otra posibilidad que no aparezca en la línea anterior?. Gracias de antemano. |
#4
|
||||
|
||||
Bueno, eso no cambia mucho lo que he comentado antes, sólo debes crear una constante, por ejemplo, y añadir los caracteres que se pueden encontrar y luego comparar con ellos:
Luego en lugar de controlar si hay un espacio, debes controlar si hay alguno de esa constante.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#5
|
|||
|
|||
Gracias otra vez.
Lo que propones simplifica lo que pensaba hacer y, además, añades ":" entre los caracteres posibles. ¿Habrá algún otro caracter que pueda aparecer antes y/o después del nombre de una constante de texto?. Salu2. |
#6
|
|||
|
|||
Si se complica seleccionar todos los caracteres no deseados posibles por haber algunos desconocidos, se podria rellenar la constante que te comenta Casimiro con los valores que si admites y conoces ("a...z" y "A...Z"). En lugar de comprobar si el caracter se encuentra en entre ellos comprobarias si el caracter NO se encuentra y entonces ya procederias a lo que siga en tu programa.
|
#7
|
|||
|
|||
Muchas gracias Reevil.
Posiblemente esa sea la mejor forma de simplificarlo. Creo que con esa idea y las que aportó Casimiro, podré realizar lo que quería. Salu2. |
#8
|
|||
|
|||
Hola de nuevo.
Aquí está la función y la forma de llamarla. Resuelve todos los problemas que planteaba cuando empecé este hilo. La función reemplaza las apariciones de un nombre de constante en el código de un programa Delphi. No confunde los nombres "acerco52" con "co5". Si el nombre de la constante aparece varias veces en una misma línea, actúa con cada aparición de forma independiente, por lo que se evita el error comentado en el párrafo anterior. En el ejemplo se recorre un memo en el cual previamente se habría cargado el código de 'archivo.pas'.
Lo dejo en el foro por si a alguna persona le puede resultar útil en alguna situación parecida. Gracias de nuevo a Casimiro y a Reevil. Sin sus sugerencias y explicaciones no creo que lo hubiera podido realizar tan fácil y rapidamente. Saludos. Última edición por rrf fecha: 04-10-2010 a las 21:37:59. Razón: mejora en presentación del código |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Sólo para expertos: "Error reading iError.Picture.Data:Out of system resources" | sami76 | Varios | 2 | 04-10-2007 14:53:31 |
Particiones en "solo lectura " con cd_live de knoppix | Diavlo | Linux | 1 | 03-10-2007 05:06:26 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 01:03:53 |
Reemplazar "," por ":" en un punto flotante | DTAR | SQL | 2 | 10-05-2006 00:55:07 |
buscar palabras parecidas (estilo google) - "quiso decir...." | ksellas | Conexión con bases de datos | 10 | 26-01-2005 01:30:49 |
|