Ecrire une classe dans un fichier?

Ecrire une classe dans un fichier? - Delphi/Pascal - Programmation

Marsh Posté le 31-05-2007 à 15:11:56    

Bonjour,
 
J'essaye d'écrire une classe dans un fichier mais je n'arrive pas à la relire après coup.
 
Voici ce que je fais :
 

Citation :

Type
CFichierIndexClient = class
numeroLigneClient : integer;
numeroClient : string;
constructor init();
constructor init(varnumeroLigneClient : integer; varnumeroClient : string);
procedure store();
function positionClient(numClient : string) : integer;
end;
TypeFichierIndexClient = file of CFichierIndexClient;
.
.
.
Var
fichierIndex : TypeFichierIndexClient;
Begin
assign(fichierIndex,'cheminFichier');
 
rewrite(fichierIndex);
 
write(fichierIndex,self);
close(fichierIndex);


 
Vous avez une idée de pourquoi ça ne fonctionne pas et comment régler le problème?
 
Merci d'avance pour votre aide

Reply

Marsh Posté le 31-05-2007 à 15:11:56   

Reply

Marsh Posté le 12-06-2007 à 16:33:40    

Ouaip... Les objets, c'est pas trop soluble dans les fichier  :(
 
Ca ne marche pas parcequ'une classe est un pointeur menant sur des données. Quand tu fait "write(fichierIndex,self);", tu ecrit donc la valeur du pointeur (4 octects) dans ton fichier, ce qui ne sert pas à grand chose.
 
Le plus "simple" est de passer par l'intermédiaire d'un record qui ne contiendrais que des type de base : Pas d'objet, pas de pointer et pas de chaine longue . Il faudrait(au moins dans le record) changer tes type string par des String[255] (ou moins si tu veut gagner de la place).
Donc :  

Code :
  1. type
  2. TRecordClient =  record
  3.   NumeroLigneClient : integer;
  4.   numeroClient : string[50];
  5. end
  6. TypeFichierIndexClient = file of TRecordClient
  7. (...)
  8. var RecordClient : TRecordClient
  9. fichierIndex : TypeFichierIndexClient;
  10. Begin
  11. assign(fichierIndex,'cheminFichier');
  12. rewrite(fichierIndex);
  13. RecordClient.NumeroClient := self.numeroClient;
  14. RecordClient.numeroLigneClient := self.numeroLigneClient;
  15. write(fichierIndex,RecordClient);
  16. close(fichierIndex);


 
Solution avancé : Utiliser l'interface IStream ou sauvegarder les donnée de ton objet dans un fichier XML. Mais dans tout les cas, tu doit "expliquer" toi mème à l'ordinateur comment il faut traduire l'objet en fichier (et vice-versa pour la lecture)


Message édité par el zozo le 12-06-2007 à 16:42:12
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed