Jump to content


Photo

Cargar clase desde fichero


  • Please log in to reply
7 replies to this topic

#1 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 posts
  • LocationMadrid/Sevilla

Posted 01 November 2010 - 10:00 AM

Estimados compañeros foreros,

Estoy tratando de cargar un clase que se encuentra en un fichero. La aplicación dispone de una instancia global de la clase TEstante ya creada.



delphi
  1. procedure TForm1.btCargarClick(Sender: TObject);
  2. var
  3.     FEstante : file of TEstante;
  4. begin
  5.     AssignFile (FEstante, 'patatita.bin');
  6.     Reset (FEstante);
  7.     Read (FEstante, Estante);
  8.     CloseFile (FEstante);
  9.     ShowMessage ('Archivo cargado con éxito');
  10. end;



El resultado de la ejecución de este código es que Estante sigue conteniendo el mismo contenido que antes, por lo que la línea


delphi
  1.     Read (FEstante, Estante);


no sustituye el contenido actual de Estante con el que se encuentra en el fichero.

Puedo poner la aplicación entera (es pequeñita) a disposición si es necesario. Pienso subirla igualmente cuando termine ya que es un ejemplo del uso de TCollection.
  • 0

#2 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 posts
  • LocationMaracaibo

Posted 01 November 2010 - 10:30 AM

Yo intentaría usar algo más interoperable y multiplataforma

JSON
  • 0

#3 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 posts
  • LocationMadrid/Sevilla

Posted 01 November 2010 - 10:38 AM

Gracias por la sugerencia, jorgeu, pero he de hacerlo introduciendo y sacando los datos binarios tal cual.
  • 0

#4 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 posts
  • LocationMadrid/Sevilla

Posted 01 November 2010 - 11:54 AM

Lo que estaba haciendo era una burrada. Acabo de percatarme de que una clase es un puntero, luego lo que se guarda (y se intenta cargar) son los 8 bytes del puntero.

Ando ahora buscando la solución a través de TFileStream. ¡A ver cómo serializo la clase!
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14448 posts
  • LocationMéxico

Posted 01 November 2010 - 11:56 AM

Si estas usando un FielStream, lo que yo haría es meterlo a un StringList y de ahí obtener los datos, pero no se como estructuras la información, así que solo es una idea :).

Salud OS
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6295 posts
  • LocationArgentina

Posted 01 November 2010 - 12:06 PM

Hola,
¿Qué es lo que se desea guardar de la clase? Si la clase en cuestión es descendiente de TComponent se podría dejar en manos del propio streaming que se encargue de leer los valores y cargarlos.

Ahora bien, si el objetivo es almacenar información que pueda cambiar, almacenarse y recuperar entonces habrá que pensar en un hipotético método LoadFromFile().

Una alternativa sencilla a la que puede recurrirse es la emplear archivos ini. Aprovechando su estructura se podría tener cosas como:

[PROPIEDADES]
nombre-propiedad1=valor-propiedad-1
...
nombre-propiedadN=valor-propiedad-2

[EVENTOS]
nombre-evento1=nombre-metodo1
...
nombre-eventoN=nombre-metodoN

De este modo, aprovechando RTTI se puede leer cada variable y valor de cada sección y recuperar los nombres de las propiedades, eventos y asociarles su valor correspondiente.

Es al menos una idea.

Saludos,
  • 0

#7 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 posts
  • LocationMadrid/Sevilla

Posted 01 November 2010 - 12:30 PM

Lo que deseo guardar es una lista dinámica. Según leí en alguna documentación, lo adecuado para esto era usar TCollection que era descendiente de TPersistant, pero al parecer que no sea descendiente de TObject es lo que lo hace precisamente complicado de guardar.

No se si seguir en ese mismo camino o buscar algun objeto que me permita manejar listas de estructuras de datos dinámicas y que desciendan de TObject.

Tengo el código actual de la aplicación de ejemplo siempre aquí: http://github.com/li...llectionExample . Esto es una simplificación del problema, ya que en la vida real me gustaría guardar algo así como el tipo TRepresentación de la imágen (pero sin usar punteros como viene representado).

Imagen Enviada
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 02 November 2010 - 12:21 PM

Pues aquí hay un interesante artículo sobre el uso de TCollection, leyendo, me encuentro que es recomendable la encapsulación, no sé si se adapta a lo que buscas.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.