none
Reconocer el tipo de una Variable ingresada en tiempo de ejecución RRS feed

  • Pregunta

  • Y como se podría leer una variable que no se sabe de que tipo sera?.

    Como se podría reconocer de que tipo de esa variable ingresada por tclado, para darle el uso respectivo.
    Se me ocurrió por el tamaño de la variable, si es d tamaño 4 bytes seria INT, si es de 1 byte sería CHAR, pero luego de reconocer el tamaño como le asignaría el tipo, ¿casteandolo?.


    Algunas ideas seria de utilidad general.

    Gracias
    lulu
    lunes, 18 de enero de 2010 20:43

Todas las respuestas

  • Nunca podrás saberlo a ciencia cierta.

    Lo primero será leer lo que quieras como una cadena de texto, caracter a caracter. Luego tendrás que mirar el primero de todos. Si es un - es posible que sea un número entero negativo, si es un número cualquiera podría ser uno positivo. O también en coma flotante, por lo que deberías recorrer la cadena entera buscando un caracter 'e'. O un coma flotante pero sin exponente, entonces busca un punto o una coma, etc. Una vez que sepas qué tipo es, tendrás que usar las funciones de conversión típicas, como atoi, atof, etc.

    Si a priori no sabes qué vas a leer, tampoco sabes cómo leer. Es decir, si usas scanf qué formato poner, etc. Y si usas windows y un textbox, lo que leas será siempre una cadena de caracteres. Ten en cuenta, que cuando piques un 1234 como número, el ordenador lee los caracteres '1', '2', '3' y '4', y luego hay que hacer la conversión pertinente, que por ejemplo hace de forma automática scanf siempre que le indiques el formateador correcto.

    Lo mismo vale para los flujos de C++, dependiendo de sobre qué variable vayas a guardar lo leído, el sistema hará la conversión pertinente.


    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    jueves, 21 de enero de 2010 12:22
    Moderador
  • mmm, entiendo, Y como es que mi profesor nos dice que un motor de base de datos funciona asi, es decir cuando el usuario ingresa un dato en un campo, el motor de base d datos reconoce de que tipo es y lo utiliza d acuerdo a ello. El profe siempre nos pone ese ejemplo y quiere q hagamos algo similar.
    Como asi hace eso el motor de base d datos.

    Gracias
    lulu
    jueves, 21 de enero de 2010 13:46
  • Pues me parece que tu profesor se equivoca, y no poco. Los campos de una base de datos tienen tipo, aunque se almacenen como cadenas, que no siempre lo hacen. Sólo hay un tipo de campo que no tiene tipo, y se llama campo "blob", y está asociado a tipos variant, que son una especificación (al menos en entornos windows) COM que contiene, aparte del propio valor almacenado, metadatos que identifican el tipo para que el sistema de tiempo de ejecución (que se llama RTTI) sea capaz de saber qué tipo es y cómo representarlo.

    Mirate por internet algún manual de algún sistema de bases de datos, busca "tipos de campos" y verás cómo si tienen tipo.

    Cuando tu construyes una sentencia SQL y das los nombres de los campos y los valores, el motor en tiempo de ejecución va y mira en la tabla correspondiente el tipo de campo, y si quieres hacer la prueba lanza una consulta con un tipo cambiado, por ejemplo intentando comparar un entero cuando el campo correspondiente es una cadena, y verás qué excepción más bonita te lanza.
    Visita mi blog sobre desarrollo: http://geeks.ms/blogs/rfog/
    viernes, 22 de enero de 2010 19:53
    Moderador
  • Me parece que el tema es más simple: Se le pide a la OP que ingrese datos y decida si los mismos son texto, numericos o porque no fecha. Esto obviamente requiere ingresar los datos como cadenas, los cuales seran analizados (para algo sencillo es bastante simple el tema) para determinar si es un simple texto, un numero (entero, double, etc) o una fecha.  Una vez determinado esto los datos serán almacenados en una variable del tipo que corresponda o en algo generico como un VARIANT de Windows o un boost::variant

    Saludos


    --
    Cholo Lennon
    Bs.As.
    ARG


    lunes, 8 de febrero de 2010 19:17