Número O Letra


Subject: 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

Last edited by Shell on Saturday, 10 October 2015, 12:03; edited 1 time in total
Subject: 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

Profile PM  
Subject: 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

Subject: 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

Last edited by vuott on Sunday, 11 October 2015, 01:30; edited 5 times in total
Profile PM  
Subject: 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

Last edited by Shell on Sunday, 11 October 2015, 11:59; edited 1 time in total
Subject: 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)

Profile PM  
Subject: 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

Subject: 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.

Profile PM  
Subject: 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

Last edited by Shell on Monday, 12 October 2015, 09:56; edited 1 time in total
Subject: 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.

Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.127s (PHP: 1% SQL: 99%)
SQL queries: 27 - Debug Off - GZIP Enabled