Ir al contenido


Foto

Cargar clase desde fichero


  • Por favor identifícate para responder
7 respuestas en este tema

#1 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 01 noviembre 2010 - 10:00

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 mensajes
  • LocationMaracaibo

Escrito 01 noviembre 2010 - 10:30

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

JSON
  • 0

#3 karj

karj

    Member

  • Miembros
  • PipPip
  • 11 mensajes
  • LocationMadrid/Sevilla

Escrito 01 noviembre 2010 - 10:38

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 mensajes
  • LocationMadrid/Sevilla

Escrito 01 noviembre 2010 - 11:54

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
  • 14.448 mensajes
  • LocationMéxico

Escrito 01 noviembre 2010 - 11:56

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
  • 6.295 mensajes
  • LocationArgentina

Escrito 01 noviembre 2010 - 12:06

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 mensajes
  • LocationMadrid/Sevilla

Escrito 01 noviembre 2010 - 12:30

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
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 02 noviembre 2010 - 12:21

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.