File et tableau de record

File et tableau de record - Delphi/Pascal - Programmation

Marsh Posté le 11-03-2006 à 13:51:11    

Bonjour.
 
En pascal, puis-je écrire dans un file de type file of un tableau de record comme ceci :
 
write(file, tableau[i]);
 
ou bien dois-je faire :
write(file, tableau[i].record1);
write(file, tableau[i].record2);
write(file, tableau[i].record2);
 
?
 
Sachant que le fichier est typé pour avoir les records.
 
Merci d'avance.
 
Siron


Message édité par Siron le 11-03-2006 à 13:51:45
Reply

Marsh Posté le 11-03-2006 à 13:51:11   

Reply

Marsh Posté le 12-03-2006 à 12:16:00    

J'ai fait la procedure mais elle fait fermer le programme :
 
TYPE

Citation :


  recstat = record
     nom : string;
     partie : integer;
     win : integer;
     point : integer;
     egal : integer;
     end;
  stats = array[1..1000] of recstat;


 
Procedure :

Citation :


procedure lire_fichier(var tabstats : stats; var filestats : file of recstat; var taillestats : integer);
VAR i : integer;
begin
i := 1;
RESET(filestats);
taillestats := 0;
while(not(EOF(filestats))) do
begin
 
 READ(filestats, tabstats[i]);
 i := i + 1;
 taillestats := taillestats + 1;
 end;
close(filestats);
end; {procedure}  


 
Code d'appel :

Citation :


ASSIGN(filestats, 'stats.txt');
lire_fichier(tabstats, filestats, taillestats);


 
Je n'ai pas trouvé pourquoi ça plante.


Message édité par Siron le 12-03-2006 à 12:16:22
Reply

Marsh Posté le 13-03-2006 à 11:18:13    

Suivant la version du pascal utilisée tu peut, ou non, lire et écrire un string dans un fichier(il y a un string dans ton record)
 
Dans les "vieu" pascal, un string est un tableau de 256 octect => pas de problème. Mais en Delphi, et je supose dans d'autres version, c'est un pointeur. Si l'enregistre, tu ne fait qu'enregistrer une adresse mèmoire(un mot de 16 ou 32 bits). Quand tu la lit, cela vas crèer un pointeur pointant vers l'adresse sauvegardé... Qui n'est certainement pas libre.
Solution : remplace la déclaration "nom : string;" par "nom : string[255];"  
 
Quand à sauvegarder un tableau de taille fixe, je pense que ça ne pose pas de problème.


Message édité par el zozo le 13-03-2006 à 11:22:04
Reply

Sujets relatifs:

Leave a Replay

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