Número O Letra


Objetivo: Número O Letra
Hola!.

Hay funciones de comprobación de tipo de datos que parece que ya no existen en gambas.
A pesar de eso, siguen apareciendo en la wiki. Como es:



Imaginar este código. Quiero saber si es una letra o es un número.

Public Sub Main()

Dim numerocadena As String

numerocadena = "4"

If IsNumber(numerocadena) Then Print "Es un número"

' No existe la función
'If IsString(numerocadena) Then Print "Es una letra"

If TypeOf(numerocadena) = gb.String Then Print "Es una letra"


End


El resultado seria:

Citar:

Es un número
Es una letra


Otra posibilidad de comprobar si solo es un número o una letra, podría ser:

If IsNumber(cadena) Then
Print "Es un número"
Else
Print "Es una letra"
Endif


Con una misma instrucción tenemos las dos posibilidades. O es cierto o es falso ( Siempre que estemos seguro que el parámetro es una cadena, claro)

Se me ha ocurrido que es posible hacer lo mismo de esta forma:

Public Sub Main()

LetraONumero("A")
LetraONumero("1")

End

Public Sub LetraONumero(cadena As String)

Dim numero As Integer

Try numero = CInt(cadena)
If Error Then
Print "Es una letra"
Else
Print "Es un número"
Endif

End


Salida:

Citar:

Es una letra
Es un número


Quizás es un poco drastico usar ERROR. Si no uso esa forma, número almacenaría 0.
Cabe la posibilidad que el parámetro de la cadena fuera un cero.

En Python, con el tipo cadenas existen dos métodos para averiguar si es un número o es una letra.

cadena[indice].isalpha() # Comprueba si es una letra
cadena[indice].isnumeric() # Comprueba si es un número


Supongo que esos métodos que no existen debieron ser eliminados de la wiki.

Saludos

última edición por Shell el Sabado, 10 Octobre 2015, 12:03; editado 1 vez
Objetivo: Re: Número O Letra
Com has escrito, a mi parece que el tu planteamiento con-funde el tipo de caracter con el tipo de dato.

Esto es una cadena, pero no es una letra del alfabeto, sino es un número.....un número de tipo String:
Dim s As String

s = "4"


Para saber si una expresión es una letra (...si tiene solo letras del alfabeto...ingles):



Esto... podria ser - o de todos modos referirse a - una letra... pero no es una cadena:
Dim b As Byte

b = 97

Perfil MP  
Objetivo: Re: Número O Letra
vuott escribió: [Ver mensaje]
Com has escrito, a mi parece que el tu planteamiento con-funde el tipo de caracter con el tipo de dato.

Esto es una cadena, pero no es una letra del alfabeto, sino es un número.....un número de tipo String:
Dim s As String

s = "4"



Correcto. Sabemos que es una cadena, pero como tal es un número dentro de una cadena.
Quizás yo quería saber que número se encuentra dentro de una cadena.

vuott escribió: 

Para saber si una expresión es una letra (...si tiene solo letras del alfabeto...ingles):

Las funciones con caracteres en gambas no las conocía. Ni llegue a verlas cuando estuve viendo el índice.
Otro despiste mas.

vuott escribió: 

Esto... podria ser - o de todos modos referirse a - una letra... pero no es una cadena:
Dim b As Byte

b = 97


b no almacena una "letra", b solo es el nombre de un identificador, el nombre de una variable.
Distinto es:
"ar4io"

Y querer ver dentro de esa cadena, si existe un "número".

Saludos

Objetivo: Re: Número O Letra
Shell escribió: [Ver mensaje]
b no almacena una "letra"


......estás tan seguro ?

Public Sub Main()

Dim b As Byte

b = 97

Print Chr(b)

End







Shell escribió: [Ver mensaje]
En Python, .......averiguar si es un número o es una letra.

.........isalpha() # Comprueba si es una letra


Curiosidad:
gambas ofrece pero la posibilidad de usar el recurso parecido al metodo .isalpha() de Python, utilizando la función externa isalpha() de... C

' int isalpha(int c)
' Checks if the passed character is alphabetic.
Private Extern isalpha(c As Integer) As Integer In "libc:6"


Public Sub Main()

Dim i, c As Integer

c = 97

i = isalpha(c)

Print Cbool(i), Chr(c)

End

última edición por vuott el Domingo, 11 Octobre 2015, 01:30; editado 5 veces
Perfil MP  
Objetivo: Re: Número O Letra
vuott escribió: [Ver mensaje]
Shell escribió: [Ver mensaje]
b no almacena una "letra"


......estás tan seguro ?


Sabía que ibas a usar un ejemplo para el código del carácter ascii.
El código es distinto...eeee..no lo líes.

Recuerda que la idea de la pregunta es encontrar un número dentro de una cadena.
Además b sigue almacenando un número, solo que tu has usado una función para
mostrar y convertir ese número a una cadena. ( si lo hubiera )...es lo contrario a lo que yo quiero.




Citar:

Curiosidad:
gambas ofrece pero la posibilidad de usar el recurso parecido al metodo .isalpha() de Python, utilizando la función externa isalpha() de... C

' int isalpha(int c)
' Checks if the passed character is alphabetic.
Private Extern isalpha(c As Integer) As Integer In "libc:6"


Public Sub Main()

Dim i, c As Integer

c = 97

i = isalpha(c)

Print Cbool(i), Chr(c)

End


La segunda asignación no parece correcta. Debería ser un valor booleano lo que almacena i. La has definido del tipo entero.

Bueno, es que si buscas:

Python.Wikipedia

Y ves donde dice "Influido por..". Hay diferentes lenguajes y entre ellos esta "C" y otros más.
Ya ves...Python tiene influencias de "C". Ahí está el problema!. La mala hierba!.

Puede que tenga influencias, pero el código no resulta tan complejo.
Es un código mas fácil de comprender, tanto como el programador quiera, claro.

Saludos

última edición por Shell el Domingo, 11 Octobre 2015, 11:59; editado 1 vez
Objetivo: Re: Número O Letra
Shell escribió: [Ver mensaje]
La segunda asignación no parece correcta. Debería ser un valor booleano lo que almacena i. La has definido del tipo entero.

En el standard C no existe el valor Booleano. Además la función isalpha() quiere un Entero y devuelve un Entero:
int isalpha(int c)

Perfil MP  
Objetivo: Re: Número O Letra
Citar:

En el standard C no existe el valor Booleano. Además la función isalpha() quiere un Entero y devuelve un Entero:


En Python el valor que devuelve es Boolean. Vaya, en "C" no tenéis el tipo booleano.
Entonces no sabéis cuando es verdadero o falso. ¿ Cómo hacéis para hacer eso con las condicionales ?.

Saludos

Objetivo: Re: Número O Letra
Shell escribió: [Ver mensaje]
Vaya, en "C" no tenéis el tipo booleano.
Entonces no sabéis cuando es verdadero o falso. ¿ Cómo hacéis para hacer eso con las condicionales ?.



En C nosotros vivimos en un beato estado de absoluta y eterna Verdad.

Perfil MP  
Objetivo: Re: Número O Letra
Citar:

En C nosotros vivimos en un beato estado de absoluta y eterna Verdad



Ya me había dado cuenta. Que inocentes..
¿ Y eso no lo hace más complicado en ciertas ocasiones ?. A ver que dice el manual de C que tengo por aquí..
Así que ceros y unos. Entones expresiones como:

If valor then....


¿ No existen ?.
¿ Necesitáis decir ?.
If valor = 1 then...


Naturalmente el "Then" no existe tampoco en "C". En Python tampoco existe.
Lo que lleva a decir que en Basic se usan instrucciones que pueden ser redundantes, pero te obliga a usarlas.

Asi que...
if (valor = 1)....


Demasiados paréntesis y llaves. Debe ser que el inventó el "C" era cerrajero.
Vaya lenguaje mas "sexua"...paréntesis y llaves..guarros!.

Saludos

última edición por Shell el Lunes, 12 Octobre 2015, 09:56; editado 1 vez
Objetivo: Re: Número O Letra
Shell escribió: [Ver mensaje]
¿ No existen ?.


Se hace referencia a 0 y 1.



Shell escribió: [Ver mensaje]
Vaya lenguaje mas "sexua"...paréntesis y llaves..guarros!

El C es un himno a la vida.

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1458s (PHP: -11% SQL: 111%)
Consultas SQL: 26 - Debug off - GZIP Activado