DIFERENCIAR ENTRE MAYUSCULAS Y MINUSCULAS EN UN STRING

846 views
Skip to first unread message

Luis Martinez

unread,
Apr 30, 2012, 1:48:34 PM4/30/12
to Comunidad de Visual Foxpro en Español
Hola, tengo una tabla con un campo string que tiene valores que estan
en mayuscula y minuscula, lo que quiero hacer es sacar de ese string
las letras en minusculas.. hay una forma de hacerlo?? De ante mano
muchas gracias...

JJ

unread,
Apr 30, 2012, 2:09:27 PM4/30/12
to publice...@googlegroups.com
si lo que quieres es colocar todo el campo en mayuscula, haz un programa que actualice el campo pero colocandole Upper. (Ejemplo en mysql)

SELECT tu tabla
GO TOP
DO WHILE NOT EOF()
     xcampoclave = tutabla.campoclave
     xcampo=UPPER(tutabla.campo)
     xsql="UPDATE tutabla SET campo=?xcampo WHERE  campoclave =  ?xcampoclave"
sqlexec(McnnBD,xsql)
nRetorno= SQLEXEC(mCnnBD,xSQL)      
  IF nRetorno = -1 THEN
  MESSAGEBOX(XCONTR,"Error Actualizando los datos")
  SQLROLLBACK(mCnnBD)
  ELSE
    SQLCOMMIT(mCnnBD)
  ENDIF
  skip
ENDDO 

Luis Martinez

unread,
Apr 30, 2012, 2:12:08 PM4/30/12
to Comunidad de Visual Foxpro en Español
Gracias por la respuesta JJ pero lo que quiero es extraer las letras
en minuscula y concatenarlos a otro campo.. por ejemplo preguntar si
existe en el campo alguna letra minuscula, y si existe que me guarde
esa letra en una variable..

On 30 abr, 13:09, JJ <jeanette.jime...@gmail.com> wrote:
> si lo que quieres es colocar todo el campo en mayuscula, haz un programa
> que actualice el campo pero colocandole Upper. (Ejemplo en mysql)
>
> SELECT tu tabla
> GO TOP
> DO WHILE NOT EOF()
>      xcampoclave = tutabla.campoclave
>      xcampo=UPPER(tutabla.campo)
>      xsql="UPDATE tutabla SET campo=?xcampo WHERE  campoclave =
> ?xcampoclave"
> sqlexec(McnnBD,xsql)
> nRetorno= SQLEXEC(mCnnBD,xSQL)
>   IF nRetorno = -1 THEN
>    MESSAGEBOX(XCONTR,"Error Actualizando los datos")
>    SQLROLLBACK(mCnnBD)
>   ELSE
>      SQLCOMMIT(mCnnBD)
>   ENDIF
>   skip
> ENDDO
>
> El 30 de abril de 2012 13:18, Luis Martinez
> <luismartinez2...@gmail.com>escribió:

Antonio.xt

unread,
Apr 30, 2012, 2:25:09 PM4/30/12
to publice...@googlegroups.com

Lo que se me ocurre q

Antonio.xt

unread,
Apr 30, 2012, 2:35:48 PM4/30/12
to publice...@googlegroups.com

Lo que podrias hacer es recorrer todo el contenido del campo letra por letra y obtener el codigo ANSI de cada una con la funcion ASC(). El codigo de las letras minusculas de la "a" a la "z" es del 97 al 122.
Y cada letra minuscula que encuentres las vas pasando a una variable.

Charles A. Moreno

JJ

unread,
Apr 30, 2012, 2:40:39 PM4/30/12
to publice...@googlegroups.com
Si recorre el contenido del campo letra a letra y la funcion ATC(caracter,campo) te sirve para indicar la posicion donde encuentra el caracter indicado en el campo.

Saludos!!
Jeanette

JJ

unread,
Apr 30, 2012, 2:44:54 PM4/30/12
to publice...@googlegroups.com
Creo que no me explique bien

No es que recorras el campo letra a letra sino que tomes la cadena (abcdefghijklmnopqrstuvwxyz) y vayas tomando letra a letra de la misma y con la función 
ATC(Caracter de la cadena,campo) podrás saber en que lugar del campo se encuentra el caracter minuscula.

Saludos!!

Jorge Alfredo Jimenez

unread,
Apr 30, 2012, 2:48:09 PM4/30/12
to publice...@googlegroups.com
Hola un saludo
lo puedes hacer usando la función 
SUBSTR
SUBSTR(cExpression, nStartPosition [, nCharactersReturned])
por ejemplo  A=substr(mitabla.campo,2,LEN(mitabla.campo))
B=substr(mitabla.campo,4,LEN(mitabla.campo))

c=alltrim(upper(A+B)
bueno es una idea seguro es lo que buscas hacer
--
Jorge Alfredo Jiménez

JAJS  Ingenieria
COLOMBIA

Luis Martinez

unread,
Apr 30, 2012, 3:03:15 PM4/30/12
to Comunidad de Visual Foxpro en Español
El tema es como pregunto si es minuscula..

On 30 abr, 13:48, Jorge Alfredo Jimenez <jorgealfredo...@gmail.com>
wrote:
> Hola un saludo
> lo puedes hacer usando la función
>
> SUBSTR
>
> SUBSTR(cExpression, nStartPosition [, nCharactersReturned])
>
> por ejemplo  A=substr(mitabla.campo,2,LEN(mitabla.campo))
> B=substr(mitabla.campo,4,LEN(mitabla.campo))
>
> c=alltrim(upper(A+B)
> bueno es una idea seguro es lo que buscas hacer
>

JJ

unread,
Apr 30, 2012, 3:15:08 PM4/30/12
to publice...@googlegroups.com
DIMENSION cad(28)
variab1 = 'HOY Es El meJOR DIA'
cad[1] = 'a'
cad[2] = 'b'
cad[3] = 'c'
cad[4] = 'd'
cad[5] = 'e'
cad[6] = 'f'
cad[7] = 'g'
cad[8] = 'h'
cad[9] = 'i'
cad[10] = 'j'
cad[11] = 'k'
cad[12] = 'l'
cad[13] = 'm'
cad[14] = 'n'
cad[15] = 'ñ'
cad[16] = 'o'
cad[17] = 'p'
cad[18] = 'q'
cad[19] = 'r'
cad[20] = 's'
cad[21] = 't'
cad[22] = 'u'
cad[23] = 'v'
cad[24] = 'w'
cad[25] = 'x'
cad[26] = 'y'
cad[27] = 'z'
FOR i = 1 TO 27 
resp = AT_C(cad[i],variab1)
MESSAGEBOX(cad[i])
MESSAGEBOX(resp)
ENDFOR

ArturoPC

unread,
Apr 30, 2012, 3:20:24 PM4/30/12
to publice...@googlegroups.com
Usa la función ISLOWER().

Acá una función que hace lo que necesitas:

FUNCTION SoloMinusculas
LPARAMETERS lcCadena
LOCAL lcCadenaMinuscula, lnTamCad, i, lcCaracter
   IF TYPE("lcCadena")#"C"
      * No se recibió una cadena carácter
      RETURN ""
   ENDIF
   lcCadenaMinuscula = ""
   lnTamCad = LEN(lcCadena)   && obtener el tamano de la cedna
   FOR i=1 TO lnTamCad
      lcCaracter = SUBSTR(lcCadena,i,1)
      IF ISLOWER(lcCaracter)
         lcCadenaMinuscula = lcCadenaMinuscula + lcCaracter
      ENDIF
   ENDFOR
   RETURN lcCadenaMinuscula
ENDFUNC
  
Para llamarla

? SoloMinusculas("shU766GsdU76vA")

Slds,

ArturoPC

JJ

unread,
Apr 30, 2012, 3:21:00 PM4/30/12
to publice...@googlegroups.com
Prueba el programita que te acabo de indicar y el mismo te dice la posicion donde estan las minusculas.

si las quieres sacar ahora 
A=substr(mitabla.campo,1,resp-1))
B=substr(mitabla.campo, ,resp+1,LEN(mitabla.campo))

c=alltrim(upper(A+B)

Walter R. Ojeda Valiente

unread,
Apr 30, 2012, 3:25:07 PM4/30/12
to publice...@googlegroups.com
Hola Luis

Si lo que quieres es obtener solamente las letras minúsculas puedes hacerlo facilmente así:

lcNombre = "Hoy es Lunes"
? CHRTRAN(lcNombre, "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ ", "")

Saludos.

Walter.




> Date: Mon, 30 Apr 2012 10:48:34 -0700
> Subject: [vfp] DIFERENCIAR ENTRE MAYUSCULAS Y MINUSCULAS EN UN STRING
> From: luismart...@gmail.com
> To: publice...@googlegroups.com

ArturoPC

unread,
Apr 30, 2012, 3:36:33 PM4/30/12
to publice...@googlegroups.com
Walter:

El problema de tu código es que te pasa cualquier otro carácter que no sea minúscula. Por ejemplo:
lcNombre = "Hoy es lunes 30/04/12"
? CHRTRAN(lcNombre, "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ ", "")

Da como resultado oyeslunes30/04/12.

Lo mejor es utilizar la función ISLOWER()

Y una anotación aparte, lunes -al igual que los demás días de las semanas y los meses y las estaciones- siempre van en minúscula porque no es nombre propio.

Slds,

Arturo PC.


El lunes, 30 de abril de 2012 14:25:07 UTC-5, Walter R. Ojeda Valiente escribió:
Hola Luis

Si lo que quieres es obtener solamente las letras minúsculas puedes hacerlo facilmente así:

lcNombre = "Hoy es Lunes"
? CHRTRAN(lcNombre, "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ ", "")

Saludos.

Walter.




> Date: Mon, 30 Apr 2012 10:48:34 -0700
> Subject: [vfp] DIFERENCIAR ENTRE MAYUSCULAS Y MINUSCULAS EN UN STRING
> From: luismart...@gmail.com

Walter R. Ojeda Valiente

unread,
Apr 30, 2012, 3:39:36 PM4/30/12
to publice...@googlegroups.com
Hola Arturo

Es que si hay números o símbolos, entonces simplemente se los agrega y ya está.


lcNombre = "Hoy es lunes 30/04/12"
? CHRTRAN(lcNombre, "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ 0123456789/-", "")

Saludos.

Walter.






Date: Mon, 30 Apr 2012 12:36:33 -0700
From: apa...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] DIFERENCIAR ENTRE MAYUSCULAS Y MINUSCULAS EN UN STRING

ArturoPC

unread,
Apr 30, 2012, 3:48:10 PM4/30/12
to publice...@googlegroups.com
Hola Walter:

La lista sería de nunca acabar. Claro, podrías decir: "Yo sé que en aquel campo no ingresarán jamás el símbolo de la libra esterlina, £" y tienes toda la razón y vale, adelante.

Pero si deseas hacer una buena función, que una vez hecha no le tengas que volver a meter la mano (porque, ¡oh sorpresa! hay que agregar los signos de admiración e interrogación). Una función que siempre haga lo que quieras, pues, definitivamente, ISLOWER() es lo mejor.

Y la idea la programar es hacer las cosas del modo que menos trabajo te den luego.

Slds,

ArturoPC.

El lunes, 30 de abril de 2012 14:39:36 UTC-5, Walter R. Ojeda Valiente escribió:
Hola Arturo

Es que si hay números o símbolos, entonces simplemente se los agrega y ya está.

lcNombre = "Hoy es lunes 30/04/12"
? CHRTRAN(lcNombre, "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ 0123456789/-", "")

Saludos.

Walter.






Date: Mon, 30 Apr 2012 12:36:33 -0700
From: apa...@gmail.com

JJ

unread,
Apr 30, 2012, 3:51:49 PM4/30/12
to publice...@googlegroups.com
Luis
El programita que yo te coloque indica la posición y el caracter (pruebalo), ya con esa información mas la funcion Substr puedes hacer lo que tu quieres. Es solo un ejemplo, tambien lo puedes hacer con una cadena de caracteres.
espero te sirva.

Saludos!!

Walter R. Ojeda Valiente

unread,
Apr 30, 2012, 4:15:53 PM4/30/12
to publice...@googlegroups.com
Primero, no es de nunca acabar. Segundo, mi solución es más corta y sencilla que la tuya.

Pero dejemos que el interesado decida.

Saludos.

Walter.





Date: Mon, 30 Apr 2012 12:48:10 -0700
From: apa...@gmail.com
To: publice...@googlegroups.com

ArturoPC

unread,
Apr 30, 2012, 4:34:02 PM4/30/12
to publice...@googlegroups.com
Bueno, algún día tendrás la cadena completa y te aseguro que en algún momento aparecerá un carácter inesperado.

Más corta, sí; más sencilla, sí; pero no más efectiva. Más allá de tener una línea que te sirva solo para esa rutina y nada más, la idea es crear funciones que te sirvan siempre. Desde ese punto de vista, no son comparables nuestras ayudas porque tú pones una línea (que puede fallar) y yo pongo una pequeña función que no solo hace lo que se le pide sino que valida que el dato que recibe sea del tipo correcto (Carácter) y a partir de ese momento, cuando se vuelva a necesitar, bastará con poner una línea en el programa.

Y tienes razón, que sea el interesado el que decida.

Slds,

Arturo PC.

El lunes, 30 de abril de 2012 15:15:53 UTC-5, Walter R. Ojeda Valiente escribió:
Primero, no es de nunca acabar. Segundo, mi solución es más corta y sencilla que la tuya.

Pero dejemos que el interesado decida.

Saludos.

Walter.





Date: Mon, 30 Apr 2012 12:48:10 -0700
From: apa...@gmail.com

Pablocpn

unread,
Apr 30, 2012, 4:36:14 PM4/30/12
to Comunidad de Visual Foxpro en Español
Saludos a todos,

Amigo walter tiene la solucion en el ejempli k t dio..
Estoy respondiendo con el celu asi k sere corto..

Usa la funcion primero para hallar los k nos minuscula y guarda el
resultado y despues usa ls funvion otra vrz con ese valor para hallar
las minusculas, ojala me deje entrndr..

Pablocpn
Lima, Peru

Antonio.xt

unread,
Apr 30, 2012, 4:38:15 PM4/30/12
to publice...@googlegroups.com

A ver si se reporta, el colega Luis Martinez que inicio este hilo para ver si ya encontro solucion a su duda o si aun no, porque veo que la duda se puede prestar a confusion. Yo le habia sugerido la misma solucion que ArturoPc solo que en lugar de ISLOWER(), seria con BETWEEN(ASC(caracter),99,127, para saber si el caracter es una letra minuscula, aunque es mas apropiado con ISLOWER(), por si hay una letra minuscula con acento.

La solucion de Walter es otra que tal vez da el mismo resultado, la colega Jeanette es otro metodo diferente, y el colega Jorge Alfredo otro diferente.

Lo que Luis Martinez dice es lo siguiente:

Tengo una tabla con un campo string con valores que estan en maysculas y minusculas.
Ejemplo: "Juan Perez"

Quiero "sacar" de ese string las letras minusculas.
Resultado: "uanerez"  --> Que son las letras minusculas sacadas del campo

Saludos...


Pablocpn

unread,
Apr 30, 2012, 4:39:37 PM4/30/12
to Comunidad de Visual Foxpro en Español
disculpen por las faltas de comas y ortografia

On 30 abr, 15:36, Pablocpn <debora....@gmail.com> wrote:
> Saludos a todos,
>
> Amigo, walter tiene la solucion en el ejempli k t dio..
> Estoy respondiendo con el celu asi k sere corto..
>
> Usa la funcion primero para hallar los k no son minuscula y guarda el
> resultado y despues usa la funcion otra ves con ese valor para hallar

Pablocpn

unread,
Apr 30, 2012, 4:46:11 PM4/30/12
to Comunidad de Visual Foxpro en Español
seria asi ...


lcNombre = "Hoy es Lunes"
lcmayus = CHRTRAN(lcNombre, "abcdefghijklmnopqrstuvwxyz ", "")
? CHRTRAN(lcNombre, lcmayusc, "")

Pablocpn

Luis Martinez

unread,
Apr 30, 2012, 5:10:56 PM4/30/12
to Comunidad de Visual Foxpro en Español
Gracias a todos por sus respuestas amigos... me sirvio de mucho..

Walter R. Ojeda Valiente

unread,
Apr 30, 2012, 5:58:33 PM4/30/12
to publice...@googlegroups.com
Después de leer tu e-mail se me "prendió la lamparita" y le encontré la solución más rápida, corta y sencilla:

lcNombre = "Napoleón Bonaparte nació en Córcega"

1º. Se quitan las minúsculas del string original, o sea que se obtiene un string sin letras minúsculas

lcSinMinusculas = CHRTRAN(lcNombre, "abcdefghijklmnñopqrstuvwxyz", "")

2º. Se quita todo lo que no sea letra minúscula del string original, o sea que se obtiene un string que solamente contiene las letras minúsculas del string original

lcSoloMinusculas = CHRTRAN(lcNombre, lcSinMinusculas, "")

Resumiendo:

lcNombre = "Napoleón Bonaparte nació en Córcega"

? CHRTRAN(lcNombre, CHRTRAN(lcNombre, "abcdefghijklmnñopqrstuvwxyz", ""), "")

Saludos.

Walter.



> Date: Mon, 30 Apr 2012 13:36:14 -0700
> Subject: [vfp] Re: DIFERENCIAR ENTRE MAYUSCULAS Y MINUSCULAS EN UN STRING
> From: debor...@gmail.com
> To: publice...@googlegroups.com

Antonio.xt

unread,
Apr 30, 2012, 6:14:41 PM4/30/12
to publice...@googlegroups.com

Excelente Walter, ahora si que en una sola linea, y ademas se soluciona el problema de que el campo incluya caracteres especiales, no se tomarian en cuenta, ya que el parametro serian unicamente las letras minusculas. Y si da el mismo resultado que la función que sugeri.

Solo hay que agregarle las minusculas con acentos, si es que el usuario tambien quiere considerar los acentos.

Saludos...

Charles A. Moreno

Pablocpn

unread,
Apr 30, 2012, 10:38:07 PM4/30/12
to Comunidad de Visual Foxpro en Español
K bien walter,

Es la misma solucion k di mensajes arriba, syudado de tu ejemplo..

No estuvr mal despues de todo

seria bueno, ke dijeran como soluciono el problema nurstro amigo.

Saludos

Pablocpn
Lima, Perú




Walter R. Ojeda Valiente ha escrito:
Reply all
Reply to author
Forward
0 new messages