FoxPro/Visual FoxPro - eliminar espacios de varias longitudes en una cadena

 
Vista:
sin imagen de perfil

eliminar espacios de varias longitudes en una cadena

Publicado por Jorge Cromer (31 intervenciones) el 05/09/2015 20:33:55
Hola, tengo cadenas de este tipo: "Jr. Miguel Angel 417 Int 5 Dpto 7 Lte 9" para ser mas claro en los espacios, los representare por "#" :"Jr.#Miguel#Angel#417##Int#5###Dpto#7####Lte#9"
Lo deseo asi: "Jr. Miguel Angel 417 Int 5 Dpto 7 Lte 9" (espaciado normal).

He tratado de usar STRTRAN(), AT(), etc. pero me he bloqueado y no logro perfeccionar la rutina. Favor
alquien puede ayudarme. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

eliminar espacios de varias longitudes en una cadena

Publicado por Jorge Cromer (31 intervenciones) el 06/09/2015 20:15:03
Hola amigos, para aquellos que tengan este tipo de contratiempos, les comento que ya solucione el problema
y la clave es reemplazar los espacios en blanco de 2 en dos con caracteres poco comunes como por ejm. con caracteres
ascii, usando STRTRAN, luego "borrar" con el mismo comando el segundo caracter, despues convertir el primer caracter
en espacio en blanco. Esta rutina se debe repetir tantas veces como el maximo espaciado que hay dentro de la cadena .
Bueno gracias por su atencion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

eliminar espacios de varias longitudes en una cadena

Publicado por Eduardo Ureña (19 intervenciones) el 07/09/2015 01:43:53
No se hubiera complicado amigo mío. Era más simple reemplazar el doble espacio con un espacio y listo, utilizando la misma función strtran.

Eduardo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

eliminar espacios de varias longitudes en una cadena

Publicado por jorge cromer (31 intervenciones) el 07/09/2015 09:15:32
Si es cierto, gracias por tu consejo. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de baldo
Val: 213
Bronce
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

eliminar espacios de varias longitudes en una cadena

Publicado por baldo (3 intervenciones) el 07/09/2015 13:54:50
Buena base de trabajo... a perfilar

Sustituir cada pareja de espacios (STRTRAN) por un sólo espacio deja un sólo espacio obviamente si y solo si los espacios presentes en la cadena origen son 1 ó 2. Por ejemplo si entre dos palabras hay 3 espacios, esta sustitución deja 2 espacios como resultado, haciendose preciso reiterar la operación para dejar uno sólo.

Es fácil comprobar (y obvio), que las reiteraciones dependen del número de espacios (por ejemplo con 9 espacios estre palabra habria que hacer 4 pasos.....) : 9... 5 - 3 - 2 - 1

Lo lógico es hacer una iteración con salida cuando se detecte que no hay más sustituciones a hacer por cualquier método de test, como que en la última sustitución no ha variado la longitud de la cadena o que ya no queden más parejas de espacios (más óptimo).


1
2
3
4
*:MIENTRAS HAYA UNA PAREJA DE ESPACIOS
DO WHILE ATC("  ",VAR)>0        && Nota: hay dos espacios entre las comillas
	VAR=STRT(VAR,"  "," ")  && Nota: estamos sustiuyendo DOS espacios (primer entrecomillado) por UNO (segundo)
ENDDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

eliminar espacios de varias longitudes en una cadena

Publicado por Luiz Alexandre (58 intervenciones) el 07/09/2015 17:22:44
Usei uma parte da ideia do Baldo
1
2
3
4
5
lsAux = "Jr.#Miguel#Angel#417##Int#5###Dpto#7####Lte#9"
lsB = CHRTRAN(lsAux,"#", " ")
DO WHILE ATC("  ",lsB)>0
	lsB=STRTRAN(lsB,"  "," ")
ENDDO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar