como extraer los caracteres validos de una cadena

1,981 views
Skip to first unread message

Marcelo Barberis

unread,
May 8, 2017, 6:28:34 PM5/8/17
to publicesvfoxpro
Hola buenas tardes, tengo un tema que yo le dado de varias formas y no me da lo que deseo creo que mi disco duro se colgó y no veo la solución capaz que es fácil pero no me doy cuenta y quería ver si pueden darme una ayuda.

El tema es que tengo una cadena de largo 29

66NFPA84T       @!     /$# %

Que es lo que deseo, es extraer en este caso solo los primeros 9, se que es mas fácil usar la función left(cadena,9) pero aveces la cadena son los primero 8 otras veces son los primeros 10 y asi no es fijo es cambiante, en si, es los caracteres anteriores a los especios en blancos de la cadena y no se tiene que extraer caracteres especiales solo los que son letras y números, en este caso seria que debo extraer 66NFPA84T cuyo largo es 9

De antemano gracias por cualquier comentario que me ayude
--
Marcelo Barberis Gutierrez
Sistemas Informaticos
Villa Montes - Bolivia
Telef.: +591-76830544

Luis la Romana

unread,
May 8, 2017, 6:37:51 PM5/8/17
to Comunidad de Visual Foxpro en Español
Y si creas una tabla con primer campo C,10 y le das append from mifile.txt type sdf  (te traes todo hasta la columna 10) luego creas segundo campo en donde usas repla con len para llenar ese campo ya con los filtros que deseas.

Víctor Hugo Espínola Domínguez

unread,
May 8, 2017, 7:07:22 PM5/8/17
to publice...@googlegroups.com
#Define _LETRAS_        "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#Define _DIGITOS_       "0123456789"
#Define _CAR_VALIDOS_   _LETRAS_ + Lower(_LETRAS_) + _DIGITOS_

lcDatBruto     = "66NFPA84T       @!     /$# %"
lcDatValido    = Getwordnum(m.lcDatBruto, 1, Space(1))
lcCarNoValidos = Chrtran(m.lcDatBruto, _CAR_VALIDOS_, "")
lcDatValido    = Chrtran(m.lcDatValido, m.lcCarNoValidos, "")

Messagebox(m.lcDatValido)


Saludos,
Víctor.
Lambaré - Paraguay.

ArturoPC

unread,
May 8, 2017, 7:30:05 PM5/8/17
to Comunidad de Visual Foxpro en Español
Si es los caracteres antes de los espacios en blanco la solución sería:

lcCadena29 = "66NFPA84T       @!     /$# %"
lnPrimerBlanco = AT(CHR(32), lcCadena29)
lcCadenaLimpia = SUBSTR(lcCadena29, 1, lnPrimerBlanco-1)

Saludos.

Arturo PC

Fidel Charny

unread,
May 8, 2017, 7:59:48 PM5/8/17
to Comunidad de Visual Foxpro en Español
Arturo:
La solución es básicamente lo indicado por Victor Hugo, donde solamente habría que ver la restricción de la cantidad de caracteres que lleva la cadena.
En cuanto a lo que indicas, es más corto ponerlo así:
lcCadena29 = "66NFPA84T       @!     /$# %
"
lcCadena_Limpia = STREXTRACT(m.lcCadena29,"",CHR(32))

Pero Marcelo no dice que los primeros caracteres sean todos válidos, por lo que es necesario recurrir a la formulación de Victor Hugo.

Marcelo Barberis

unread,
May 8, 2017, 9:31:33 PM5/8/17
to publicesvfoxpro

Hola bueno gracias por los aportes en si los caracteres validos son los primeros hasta donde empiezan los espacios pero la cadena tiene un largo de 29 en el ej puesto alli los caracteres son 9 me toco otro q era 8 tambien 10 nose porq pasa pero me pase mas de dos horas y no di porq despues de eso hago otras validaciones y comparaciones por eso era q saque los caracteres validos dejando de lado los basura

Marcelo Barberis

unread,
May 8, 2017, 9:43:26 PM5/8/17
to publicesvfoxpro
gracias amigos por los aportes muy agradecido

Marcelo Barberis

unread,
May 8, 2017, 9:43:55 PM5/8/17
to publicesvfoxpro
salio bien gracias

Jose Antonio Blasco

unread,
May 9, 2017, 3:08:46 AM5/9/17
to Comunidad de Visual Foxpro en Español
Ya se que llego tarde pero,  ¿ hay alguna razón por la que no se pueda utilizar "GETWORDNUM(lcCadena29,1)"  ?

Un saludo.



Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2

Fidel Charny

unread,
May 9, 2017, 8:38:10 AM5/9/17
to Comunidad de Visual Foxpro en Español
Yo veo mal o es lo que indicó Victor Hugo ?

lcDatValido    = Getwordnum(m.lcDatBruto, 1, Space(1))

Por lo que dice Marcelo, parecería que es posible simplificar con:
lcCadena_Limpia = STREXTRACT(m.lcCadena_Original,"",CHR(32))

Jose Antonio Blasco

unread,
May 9, 2017, 8:46:40 AM5/9/17
to Comunidad de Visual Foxpro en Español
jajajaja... Eso me pasa por leerlo nada más llegar a la oficina.

Sólo una cosa, si el separador es el espacio (chr(32)), se puede omitir.

Saludos.     :-)))


Jose A. Blasco
Zaragoza - España
Visual FoxPro 9 SP2


Jorge L. Florez C.

unread,
May 9, 2017, 2:06:23 PM5/9/17
to publice...@googlegroups.com
Hola, y porque no usas isdigit, isalpha?

Saludos
Jorge Florez

Víctor Hugo Espínola Domínguez

unread,
May 9, 2017, 2:32:48 PM5/9/17
to publice...@googlegroups.com
No sé los demás, pero yo no lo usé en este caso para evitar la fatiga, debido a que debería escribir un ciclo y ... ya me cansé

Saludos,
Víctor.
Lambaré - Paraguay.


Reply all
Reply to author
Forward
0 new messages