Apúntate...


Consultas, desarrollo de programas y petición de presupuestos:

viernes, 24 de agosto de 2012

Funciones de Conversión tipos de datos

-->
En muchos programas necesitaremos convertir un tipo de dato a otro tipo. 

Gambas nos proporciona una serie de funciones que realizan distintos tipos de conversión:

Funciones de Conversión
CBool Convierte un valor en Boolean.
CByte Convierte un valor en Byte.
CDate Convierte un valor en Date.
CFloat Convierte un valor en Float.
CInt Convierte un valor en Integer.
CLong Convierte un valor en Long.
Conv$ Convierte una cadena de un juego de caracteres a otro.
CShort Convierte un valor en Short.
CSng Convierte un valor en Single.
CStr Convierte un valor en String.
CVariant Convierte un valor en Variant.
Sólo en versión 3.0
DConv$ Convierte una cadena del juego de caracteres del sistema a UTF-8 (juego de caracteres de la interfaz gráfica).
SConv$ Convierte una cadena desde el juego de caracteres UTF-8 (el empleado en la interfaz gráfica) al juego de caracteres del sistema.
Str$ Convierte un número o fecha en una cadena.
Val Convierte una cadena en un número o fecha.

Mas información:  http://gambasdoc.org/help/cat/conv?en&v3 y http://gambasdoc.org/help/cat/conv?es&v3

Un ejemplo:
Este programa recibe una cadena, lo convierte en un numero, y le suma 23, mostrando el resultado:
-->
Dim cadena As String
Dim numero As Float
Print "Ejemplo de conversion de tipos:"
Print "Convertir una cadena en un numero"
Input cadena
Print "Esto seria cadena:", cadena
numero = Val(cadena) 'aqui hago uso de la función de conversión
Print "Esto seria como un numero: ", numero

numero += 23 'le sumo al numero 23 unidades
Print "Y puedo realizar operaciones con el numero:", numero

Descarga del ejemplo completo: Enlace


Nota:
Añado aqui otro código, este hace uso de la orden Try (ver gestion de excepciones y errores )
Este código  "comprueba" que el usuario ha escrito un número y no un texto (que origina un error del tipo "No coinciden los tipos: Requerido Float, obtenido Null en cambio"). En caso de que el usuario escriba un texto, el programa vuelve a pedir que se introduzca de nuevo un número, (para ello usa el bucle while wend)


' Gambas module file

Public Sub Main()
Dim cadena As String
Dim numero As Float
Dim Nosalir As Float = True
Print "Ejemplo de conversion de tipos:"
Print "Convertir una cadena en un numero"
While Nosalir 'bucle que se repite hasta que se haya introducido un numero
Print "introduce numero:"
Input cadena
Print "Esto seria cadena:", cadena
Try numero = Val(cadena) 'aqui hago uso de la función de conversión y de la instrucción Try, que si se detecta que si se ha producido un error.
If Error Then
Print "El usuario no ha introducido un numero, vuelve a intentarlo"
Nosalir = True
Else
NOsalir = False 'esto hace que al evaluarse la condicion del bucle While, salgamos de este
Endif
Wend
Print "Esto seria como un numero: ", numero
numero += 23 'le sumo al numero 23 unidades
Print "Y puedo realizar operaciones con el numero:", numero
End

Descarga del código de ejemplo: enlace





7 comentarios:

  1. Y en el caso de variables de tipo Result que lo quiera convertir a entero?

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Buenas, muy bueno el curso
    Estoy iniciando con el asunto de programar, así que voy a hacer preguntas quizás muy obvias o tontas..
    Seguí el ejemplo tipeandolo y lo descargué, en ambos casos luego de escribir una palabra o letra obtengo un error en la linea 16 "No coinicen los tipos: Requerido Float, obtenido Null en cambio"
    Cual sería el error? Estoy usando Gambas 3.4.1
    Desde ya gracias por el trabajo realizado

    ResponderEliminar
  4. Hola Maximiliano:
    Lo que esta ocurriendo es debido a que la funcion val() espera algo un número por ejemplo que escribas "23.45", pero si escribes "hola", no puede convertirlo en número, y lo que hace es devolver el valor Null y sales del programa "abruptamente"

    Para evitar esto se usan las excepciones ( lo explico aqui: http://cursogambas.blogspot.com.es/2012/11/gestion-de-excepciones-y-errores.html). He añadido a este post, un otro ejemplo, para que veas como sería.

    Te explico, en este caso sería algo asi como:
    Try numero = Val(cadena)
    if error then
    print "El usuario no ha escrito un numero"
    print "fin del programa" ' tambien puede volver pedir otra vez la introducción del numero, usando un ciclo while, por ejemplo
    endif

    ResponderEliminar
  5. Gracias Fernando, muy ilustrativo el ejemplo. De a poco voy entendiendo, pero seguro seguiré molestando con preguntas de este tipo. Saludos

    ResponderEliminar
  6. identificador desconocido: TextUsuario en Modcon.module:32

    como puedo hacer para corregir este error no me reconoce TextUsuario el modulo

    ResponderEliminar

A falta de donativos... un poco de publicidad