Foros del Web » Programación para mayores de 30 ;) » C/C++ »

leer datos binarios

Estas en el tema de leer datos binarios en el foro de C/C++ en Foros del Web. hola maestros tengo una duda tengo que leer varias de tablas de mas de 5000 registros y mostralas en un grid , mi problema es ...
  #1 (permalink)  
Antiguo 11/08/2006, 23:33
Avatar de OYEME  
Fecha de Ingreso: marzo-2004
Ubicación: Lima
Mensajes: 307
Antigüedad: 20 años, 9 meses
Puntos: 1
leer datos binarios

hola maestros tengo una duda tengo que leer varias de tablas de mas de 5000 registros y mostralas en un grid , mi problema es que se demora mucho lo estoy haciendo en vb net 2005 pero me han comentado que se podria crear una rutina en c++ para leer esos datos de una forma mas rapida me dijeron trabjando con datos binarios
no se si alguien me puede ayudar
gracias
__________________
http://www.luisariashidalgo.com
  #2 (permalink)  
Antiguo 12/08/2006, 02:33
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
puedes crear una DLL con la funcion en C e invokar esta funcion desde VB.NET.

la funcion podria ser mas o menos así:

__declspec(dllexport) void ReadData(char* data, int ndata, char* file)
{
FILE* file = fopen(file, "br");
fread(data, ndata, file);
}

y para usarla.

pues podrias usar una array de Byte, aunque puedes usar otro tipo u objeto teniendo cuidado de indicarle en numero correcto de bytes, a la funcion.

por ejempo:

Dim data(20) as Byte

ReadData(data, 20, "unfichero.dat");

algo asi.

Saludos
  #3 (permalink)  
Antiguo 12/08/2006, 17:07
Avatar de OYEME  
Fecha de Ingreso: marzo-2004
Ubicación: Lima
Mensajes: 307
Antigüedad: 20 años, 9 meses
Puntos: 1
Gracias por responder nivel7 queria hacret unas preguntas
en la funcion readdata recibes el archivo pero eso yo lo tengo en una tabla de clipper tengo que pasarlo a un txt o dat????
que devuelve la funcion readdata????? un conjunto de datos o que?
el arreglo de byte para que me sirve exactamnete espero tu respuesta gracias de antemano
__________________
http://www.luisariashidalgo.com
  #4 (permalink)  
Antiguo 12/08/2006, 17:50
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años, 7 meses
Puntos: 0
No se como que estructura tenga los archivos de clipper, pero si habres el archivo en modo binario no hay diferencia. Sin embargo, no se si esto sea buena idea. Abrir un archivo de BD para acceder a el es como olvidar para que son los archivos de Bd.
Ademas, si solo copias la informacion dudo que en C++ ballas a odtener una mejor que valga el esfuerso, creo que deverias de ver que onda con tu conexion tal vez solo necesitas actualizar tu controlador (estas usando tecnologia ODBC ¿o no?), eso te lo digo por experiencia. O talves deverias exportar tu BD a un mas amigable.
__________________
-> La duda adecuada es un buen comienzo <-
  #5 (permalink)  
Antiguo 13/08/2006, 02:36
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
seria bueno que analizaras los puntos propuestos por arm.

la funcion no retorna ningun valor, lo leido se intercambia atraves de data.

el fichero puede tener cualquier extencion.

si quieres leer otro tipo diferente a un array de char solo tienes que pasar su memoria y el total de bytes de este tipo.


ejemplo;

int MisDatos;

ReadData(&MisDatos, sizeof(int), "unfichero.dat");

no se somo se manejen las direcciones y el sizeof en VB.NET
ima gino que parametros ByRef puedes usarlo para el parametro data.

Saludos.
  #6 (permalink)  
Antiguo 13/08/2006, 05:12
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Cita:
Iniciado por OYEME Ver Mensaje
se podria crear una rutina en c++ para leer esos datos de una forma mas rapida me dijeron trabjando con datos binarios
Sí, pero primero necesitarás aprender lo más básico de C y de cruces de lenguajes para hacértela, ¿no?
  #7 (permalink)  
Antiguo 13/08/2006, 11:14
arm
 
Fecha de Ingreso: mayo-2006
Mensajes: 112
Antigüedad: 18 años, 7 meses
Puntos: 0
OYEME, creo que podrias utilizar algo de humo y espejos para hacer parecerle al usuario que estas prsentando los 5000 registros cuando solo le estas presentando lagunos. Es decir, podrias copiar solo 30 registros y cuando el desplazamiento se aproxime al final comenzar a cargar otros 30, o podrias mantenerte cargando con un hebra que ocupe pocos recursos. Se que te puede ser muy uti por que en la mayoria de los casos no se utilizan todos los datos o hay algunos que tiene cirta probavilidad de ser usados, esos tu como diseñador lo puedes saber. Si te es util este camino, entonces si prodras usar un funcion C en una DLL.
__________________
-> La duda adecuada es un buen comienzo <-
  #8 (permalink)  
Antiguo 13/08/2006, 11:16
Avatar de OYEME  
Fecha de Ingreso: marzo-2004
Ubicación: Lima
Mensajes: 307
Antigüedad: 20 años, 9 meses
Puntos: 1
gracias a todos por responder pero miren el problema que tengo es este
tengo tablas como t01011,t01012,t01013 etc.
tengo 30 tablas de esas cada una con 7000 registros y todas las quiero poner en una sola tabla por que quiero hacer una consulta por mes
hago algo mas o menos asi:
for i=1 to 30
tabla = "select * from t0101" & i
da=new sqldataadapter("tabla")
da.fill(ds,"Tabla")
next
eso es todo pero el problema es que se demora mucho y en algunos casos me sale "memoria virtual insuficiente" lo he probado en varias computadoras pero me sale el mismo error
Ahora yo queria jalar los datos desde una rutina hecha en c++ ya queme comentaron que se puede hacer
Yo he manejado ficheros en c++ utilizando fopne, fseek, y otras funciones
mi pregunta es cual es la forma mas rapida de acceder a tablas cuando tieme muchos registros?????


next
__________________
http://www.luisariashidalgo.com
  #9 (permalink)  
Antiguo 13/08/2006, 12:58
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Cita:
Iniciado por OYEME Ver Mensaje
Yo he manejado ficheros en c++ utilizando fopne, fseek, y otras funciones
mi pregunta es cual es la forma mas rapida de acceder a tablas cuando tieme muchos registros?????
Estás hablando de C, no de C++.

Y tus tablas son SQL. C/C++ no provee de funciones para leer tablas SQL. Deberás usar una librería adicional.

Pero, tanto si lo haces con C/C++ como VB el problema es el planteamiento que le das. Por mucho C/C++ que uses la memoria virtual que tienes es la misma. NO puedes tratar de cargar toda la tabla en memoria.

¿Para qué usas la base de datos si cargas todo a la vez?
  #10 (permalink)  
Antiguo 14/08/2006, 14:36
Avatar de OYEME  
Fecha de Ingreso: marzo-2004
Ubicación: Lima
Mensajes: 307
Antigüedad: 20 años, 9 meses
Puntos: 1
gracias a todos maestros
pero solucione en parte el problema
respondiendo a tu pregunta MaxExtreme lo que pasa es que cada tabla que tengo guarda la informacion de un dia y en algunos casos la empresa quiere ver la informacion de todo un mes por eso es que yo me recorria todas las tablas y la guardaba en una sola

lo solucione ytrabjando con datos binarios en vb net 2005
trabje con el metodo serialize y deserialize
pero aun quisiera saber si hay una forma mas rapida
gracias a todos por sus respuestas maestros
pd:si alguien le interesa pongo como recoger codigos binarios en vbnet 2005, aunque este es el foro de c++ jeje
__________________
http://www.luisariashidalgo.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:06.