Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Saber si una cadena está en mayuscula

Estas en el tema de Saber si una cadena está en mayuscula en el foro de Visual Basic clásico en Foros del Web. Pues eso, como lo puedo averiguar ? Gracias....
  #1 (permalink)  
Antiguo 28/04/2009, 09:11
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Saber si una cadena está en mayuscula

Pues eso, como lo puedo averiguar ?

Gracias.
  #2 (permalink)  
Antiguo 28/04/2009, 09:15
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Saber si una cadena está en mayuscula

si con el upercase basta
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Última edición por Peterpay; 28/04/2009 a las 09:32 Razón: No me fije en la seccion
  #3 (permalink)  
Antiguo 28/04/2009, 09:23
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 15 años, 6 meses
Puntos: 5
Respuesta: Saber si una cadena está en mayuscula

En VB6 sería algo como:

if vba.ucase(strCadena)=strCadena then
msgbox("Cadena mayúscula")
end if

donde strCadena es la cadena que quieres comprobar.

Saludos.
  #4 (permalink)  
Antiguo 28/04/2009, 09:32
Avatar de gogupe  
Fecha de Ingreso: octubre-2006
Ubicación: Mallorca
Mensajes: 897
Antigüedad: 17 años, 6 meses
Puntos: 32
Respuesta: Saber si una cadena está en mayuscula

Pensaba que este foro era solo de visual basic...

Muchas gracias ComprasDesdeCasa, era justo lo que quería.

Saludos.
  #5 (permalink)  
Antiguo 24/09/2009, 18:08
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Saber si una cadena está en mayuscula

He buscado en el foro un poco por encima a ver si encontraba algo parecido a esto pero no ha sido así, y como creo que puede interesar a alguien voy a permitirme comentaros mis experiencias.

Hoy revisando algo (que he dejado a medias, por cierto), me he quedado ensimismado precisamente con una función que hice hace tiempo para distinguir entre mayúsculas y minúsculas.

Muchos de los que hayan intentado hacer esto habrán pasado por fases muy parecidas a las que yo he pasado, intentando primero comparar todas las letras, luego las acentuadas, las eñes, etc... y otros métodos, como uno que se me ocurrió, que fue meter todas las posibles letras en una cadena y con instr() saber si la letra esta en la lista o no, y otros métodos liosos.

El caso es que todas las funciones que creaba, o tenían demasiado código o no tenian en cuenta detalles como caracteres de puntuación, espacios en blanco, cadenas vacías, etc.

Pues hoy, después de intentar varias modificaciones más y cuando ya menos lo esperaba, he caido en esta solución.

Creo que cumple todas las reglas básicas:
Admite caracteres sueltos o cadenas completas.
Si le dás una cadena vacía devuelve False
Ignora cualquier caracter que no sea una letra, devolviendo True solamente en el caso de que la cadena contenga letras y todas ellas sean mayúsculas.

P.ej: "ESTA CADENA, ESTÁ EN MAYÚSCULAS." devuelve True.

¡Y todo ello en una sola línea de 2 comparaciones!

Cadena <> LCase$(Cadena)) And (Cadena = UCase$(Cadena)

Si lo metemos en una función sería algo como:


Código :
Ver original
  1. Function EsMayuscula(ByVal Cadena As String) As Boolean
  2.   EsMayuscula = (Cadena <> LCase$(Cadena)) And (Cadena = UCase$(Cadena))
  3. End Function

Y para las minúsculas pues:

Código :
Ver original
  1. Function EsMinuscula(ByVal Cadena As String) As Boolean
  2.   EsMinuscula = (Cadena <> UCase$(Cadena)) And (Cadena = LCase$(Cadena))
  3. End Function

Irónicamente, aún cuando la función no tiene en cuenta si en el texto que le envias hay solo letras o hay también caracteres que no son letras, resulta que cualquiera de las dos se puede usar para saber si un caracter suelto es una letra o no:

Código :
Ver original
  1. EsLetra = EsMayuscula (Ucase$(Caracter))

Si es una letra, la funcion devuelve True por que le llega una letra mayuscula
Si no es letra devuelve False al no encontrar ninguna letra.


Por otro lado, si lo que quereis de la función es conseguir un False cuando, por ejemplo, la cadena mandada contenga algún caracter que no sea estrictamente una letra mayúscula, pues de momento solo se me ocurre que hagais un bucle y comprobeis la cadena letra a letra.
Las funciones podrían quedar así:

Código :
Ver original
  1. Public Function EsMayusculaEstrict(ByVal Cadena As String) As Boolean
  2.   Dim F As Long
  3.   For F = 1 To Len(Cadena)
  4.     EsMayusculaEstrict = (Mid$(Cadena, F, 1) <> LCase$(Mid$(Cadena, F, 1))) And (Mid$(Cadena, F, 1) = UCase$(Mid$(Cadena, F, 1)))
  5.     If EsMayusculaEstrict = False Then Exit For
  6.   Next F
  7. End Function
  8.  
  9.  
  10. Public Function EsMinusculaEstrict(ByVal Cadena As String) As Boolean
  11.   Dim F As Long
  12.   For F = 1 To Len(Cadena)
  13.     EsMinusculaEstrict = (Mid$(Cadena, F, 1) <> UCase$(Mid$(Cadena, F, 1))) And (Mid$(Cadena, F, 1) = LCase$(Mid$(Cadena, F, 1)))
  14.     If EsMinusculaEstrict = False Then Exit For
  15.   Next F
  16. End Function


Saludos

Última edición por pkj; 29/09/2009 a las 09:30
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:56.