Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-10-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Guardar matriz en un archivo (para cargarla posteriormente)

Muy buenas.

Necesito guardar el contenido de una matriz en un archivo. Los elementos de la matriz son de tipo Integer, y actualmente tengo un sistema, que va elemento por elemento guardándolo en un archivo (mediante el método Write).
Lo que pasa es que este método se hace un poco lento cuando la matriz empieza a contener cientos y miles de miles de elementos.

Sé que hay un sistema para hacerlo directamente, mediante BlocRead y BlocWrite, pero no sé cómo usarlos. ¿Alguien me podría ayudar?

La matriz la declaro con un número indefinido de valores (Matriz: array [0..0] of integer, para después asignarle el tamaño que necesite con GetMem, y vaciarla con FreeMem.


Gracias a todos por vuestra atención.
Responder Con Cita
  #2  
Antiguo 11-10-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.084
Poder: 18
juanelo Va por buen camino
Hola,
Una opcion es que lo guardes mediante un TFileStream, y lo recuperes de igual manera.
Saludos
Responder Con Cita
  #3  
Antiguo 11-10-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Hola

Seoane Hace un tiempo respondió en un post sobre bloackread y blockwrite si mal no recuerdo para partir archivos en otros más pequeños.

Tal vez el problema no es escribir una matriz muy grande sino el tamaño del archivo generado

Me pregunto si es tan lento resulta escribir a un archivo una matriz aunque tenga varios miles de columnas y de filas

Que tipo de archivo usas? Un archivo de texto?

Saludos
Responder Con Cita
  #4  
Antiguo 11-10-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
El código (así, de memoria) es más o menos este

Código Delphi [-]
var
 N: Integer;
 F: File of integer;
begin
AssignFile(F, 'C:\archivo.num');
Rewrite(F);
for n:=0 to maximo-1 do // maximo es el numero de filas de la matriz
  Write(F,Matriz[n]);
CloseFile(F);
end;


El archivo no es de texto, sino tipo Integer. Ir numero por número hace el trabajo lento (ya me ha pasado otras veces con otras cosas, si mal no recuerdo leyendo carácteres unicode de archivos).

El código para leer el archivo es similar (Read en vez de Write y poco más).
Responder Con Cita
  #5  
Antiguo 11-10-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
¿No podrías subir un archivo con una matriz grande para probar con algún codigo?
Responder Con Cita
  #6  
Antiguo 12-10-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Estube probando un poco.

Puse en un stringgrid matrices de valores aleatorios enteros, una matriz de 500 * 500 (el archivo resultante es de 976 kb) y una de 3000*3000 (el archivo es de 34 mb).

Creo que la peor forma de guardar los datos en usar un archivo de tipo File of integer.

Se me ocurre. Tendría que probar otra forma para tener una idea bien clara.
Responder Con Cita
  #7  
Antiguo 12-10-2007
Robert01 Robert01 is offline
Miembro
 
Registrado: feb 2006
Ubicación: Córdoba, Argentina
Posts: 895
Poder: 19
Robert01 Va por buen camino
Como usar BlockWrite

Como usar BlockRead
Responder Con Cita
  #8  
Antiguo 28-10-2007
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Gracias por los enlaces.

El caso es que yo estaba seguro de que ya las había utilizado antes....

¡fue aquí!

Gracias de nuevo.

Saludos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
duplicar un form para posteriormente modificar solo unos datos Ade Varios 4 13-11-2006 13:05:17
Impresión en Modo Texto para matriz de puntos AzidRain Impresión 0 09-06-2006 02:15:19
Como creo un archivo para guardar registros? MadeInBsAs OOP 4 06-06-2006 21:16:33
como cargar una matriz 4x4 con datos de un archivo ? Picketero C++ Builder 1 20-04-2006 20:49:45
Guardar matriz? danytorres Varios 1 27-10-2003 04:10:23


La franja horaria es GMT +2. Ahora son las 04:49:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi