• Domingo 15 de Diciembre de 2024, 15:53

Autor Tema:  Leer Entero Desde Tabla  (Leído 3199 veces)

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Leer Entero Desde Tabla
« en: Viernes 2 de Noviembre de 2007, 17:48 »
0
Tengo una tabla en DBaseIII que tiene un campo numerico de tamaño 4.

En el codigo C tengo una estructura asi:

struct tabla{
   int idcliente;
};

Por sencillo que pueda parecer no consigo leer mediante la funcion fread()
este campo como entero.

Si en la estructura utilizo tipo char no hay problema para leer desde
DBaseIII, pero si son de tipo numerico no consigo leerlo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #1 en: Viernes 2 de Noviembre de 2007, 17:52 »
0
Código: Text
  1.  
  2. tabla t;
  3. fread(&t, sizeof(t), 1, stream);
  4.  
  5.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #2 en: Viernes 2 de Noviembre de 2007, 19:04 »
0
Vale, de acuerdo, pero si tengo una estrcutura como he indicado en
el primer mensaje, despues haría lo siguiente para leer el contenido:

fread(&c3, sizeof(c3), 1, pa);

while(!feof(pa))
{
   printf("\n%d", c3.idcliente);
   fread(&c3, sizeof(c3), 1, pa);
}

Y me salen 2 numeros de 9 cifras. Cuando yo tengo solo 2 registros, uno
con el dato 10 y el otro registro con el dato 11.

No entiendo por qué salen numeros de 9 cifras.

gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #3 en: Viernes 2 de Noviembre de 2007, 19:09 »
0
¿Miraste el archivo ese con un editor hexadecimal? ¿Estas seguro que no devuelve los valores correspondientes?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #4 en: Viernes 2 de Noviembre de 2007, 19:24 »
0
En esta direccion tengo una copia de la tabla:

www.netyweb.com/dbase3.rar

y aqui tengo una captura de pantalla del volcado en hexadecimal:

www.netyweb.com/hex.PNG

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #5 en: Viernes 2 de Noviembre de 2007, 19:33 »
0
Segun lo que se ve ahi no es un numero sino 2 caracteres ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #6 en: Viernes 2 de Noviembre de 2007, 19:47 »
0
La tabla está creada con DBF Viewer 2000 en formato DBaseIII
Si la misma tabla la visualizo con Visual FoxPro, el diseñador de
tablas me muestra el tipo Numerico y de ancho 4, que es como
la he hecho en DBF Viewer 2000. Quiero decir con esto que abriendola
con los 2 programas, la configuracion de la tabla es la misma.

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #7 en: Viernes 2 de Noviembre de 2007, 20:05 »
0
Cita de: "netyweb"
La tabla está creada con DBF Viewer 2000 en formato DBaseIII
Si la misma tabla la visualizo con Visual FoxPro, el diseñador de
tablas me muestra el tipo Numerico y de ancho 4, que es como
la he hecho en DBF Viewer 2000. Quiero decir con esto que abriendola
con los 2 programas, la configuracion de la tabla es la misma.

Gracias
Todo eso da lo mismo, mira la imagen que dejaste. Solo se ve 10 y 11 en la parte derecha que es ASCII (igual que idcliente) eso quiere decir que no es un numero entero sino una cadena de caracteres ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #8 en: Viernes 2 de Noviembre de 2007, 20:16 »
0
Segun lo que dices, cuando quiera leer un tipo que es entero en dbf lo tengo que leer como char desde C. Y para escribir en la tabla, tambien.

¿Esto es una regla general para todas las tablas dbf?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #9 en: Viernes 2 de Noviembre de 2007, 20:24 »
0
Cita de: "netyweb"
Segun lo que dices, cuando quiera leer un tipo que es entero en dbf lo tengo que leer como char desde C. Y para escribir en la tabla, tambien.

¿Esto es una regla general para todas las tablas dbf?
¿Estas seguro que es un campo de tipo entero? Comprobalo.

¿DBF? No tengo la menor idea de eso (ni quiero tenerla), yo solo te hablo de ese archivo y como podes leerlo.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #10 en: Viernes 2 de Noviembre de 2007, 20:35 »
0
Te juro que es numerico. Cuando lo creo con la herramienta anteriormente citada está configurado de esa manera.

Las tablas dbf son las que hacen referencia a las tablas de almacenmeinto de datos que utilizan aplicaciones de bases de datos como DBaseIII, Visual FoxPro, y algunas mas. Las letras dbf hacen referencia a la extension del archivo.

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #11 en: Viernes 2 de Noviembre de 2007, 20:38 »
0
Cita de: "netyweb"
Te juro que es numerico. Cuando lo creo con la herramienta anteriormente citada está configurado de esa manera.

Las tablas dbf son las que hacen referencia a las tablas de almacenmeinto de datos que utilizan aplicaciones de bases de datos como DBaseIII, Visual FoxPro, y algunas mas. Las letras dbf hacen referencia a la extension del archivo.

Gracias
Esta bien pero mira la imagen que subiste, son caracteres. Por eso estan a la derecha y se ven tal como las cadenas. Proba a leerlo asi y me contas que pasa.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #12 en: Viernes 2 de Noviembre de 2007, 20:55 »
0
He declarado un puntero a char:

char *num;

Y despues hago esto para leer:

fseek(pa,65,0);   // para posicionamiento

fread(&c3, sizeof(c3), 1, pa);   // para leer

while(!feof(pa))
{
      num = &c3.idcliente[0];
     
      for(i=0;i<sizeof(c3);i++)
      {
           printf("%c",*num);
           num++;
      }
     
      printf("\n");
      fread(&c3, sizeof(c3), 1, pa);
}

Y me muestra:

   11
   12

Los coloca a la derecha, como tú dices y deja 3 espacios en blanco
por la izquierda(aunque aqui no se vea). Esto lo entiendo, pero pensaba que al ser
datos de tipo numerico en la tabla, habría otra forma de acceder.

Por cierto, si sabes otra forma mas eficaz de leer los datos que la
que he mostrado arriba, me lo dices por favor.

Gracias.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #13 en: Viernes 2 de Noviembre de 2007, 21:01 »
0
Cita de: "netyweb"
Esto lo entiendo, pero pensaba que al ser
datos de tipo numerico en la tabla, habría otra forma de acceder.

Si, es lo logico por eso al principio te mostre el codigo que te mostre.

Cita de: "netyweb"
Por cierto, si sabes otra forma mas eficaz de leer los datos que la
que he mostrado arriba, me lo dices por favor.

Podrias declarar un char num[3];, llenarlo de ceros y leer los dos caracteres necesarios en el. Asi te quedaria una cadena de caracteres valida ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #14 en: Viernes 2 de Noviembre de 2007, 21:16 »
0
Citar
Podrias declarar un char num[3];, llenarlo de ceros y leer los dos caracteres necesarios en el. Asi te quedaria una cadena de caracteres valida ...

Perdona, no te entiendo muy bien cómo hacer eso.

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #15 en: Viernes 2 de Noviembre de 2007, 21:26 »
0
Cita de: "netyweb"
Perdona, no te entiendo muy bien cómo hacer eso.

Gracias
Basicamente asi:

Código: Text
  1.  
  2. char num[3];
  3. ZeroMemory(&num, sizeof(num)); //o memset
  4. fread(&num, 1, 2, pa); // para leer
  5.  
  6.  

El primer byte de num debe ser un caracter igual que el segundo y el tercero al no ser modificado por fread debe ser 0 por lo tanto tenes una cadena valida con el numero necesario.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

netyweb

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #16 en: Viernes 2 de Noviembre de 2007, 21:42 »
0
Gracias, muchas gracias por tu atención.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Leer Entero Desde Tabla
« Respuesta #17 en: Viernes 2 de Noviembre de 2007, 21:52 »
0
Cita de: "netyweb"
Gracias, muchas gracias por tu atención.
De nadas  B)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.