ENREGISTRER TList DANS UN FICHIER

Résolu
Signaler
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
-
Voila j'ai crée une Tlist associé a un Record pour une gestion de contact :

Voilà un exemple (bidon) :
/***********************************/

type
{ Structure pour les enregistrement de fichiers }
TContact = record // Mes contacts
nom : string;
prenom : string;
date : string;
profession : string;
taille : integer;
poids : integer;
NomEnfants : Array [0..10] of string;
end;
PContact = ^TContact;


TListContact = class(TList)
public
procedure Reset;
procedure Ajoute( snom : string; sprenom : string );
procedure Enleve( index : LongInt );
procedure Optimize;
function GetItem( const i: Integer ) : TContact;
end;

/***********************************/

PS : On remarquera que mon Record peut contenir des entiers, des chaines, des tableaux, des booleans, etc...

Ma question est simple j'aimerai enregistrer ma liste de contact dans un seul fichier et pouvoir la recupéré. Et oui une gestion de contact où on peux pas garder ses contacts .. c'est moche

Merci, Damien.

10 réponses

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

il faut que tu passes par un enregistrement de tes records

tu peux faire

F:file of TContact

procedure enregistre;

begin

AssignFile(F1,'nomdufichier'); for i:=0 to TListContact .Count-1 do

begin

PContact :=TListContact .Items[i];

write(F1,PContact ^);

end;

closeFile(F1);

end;

pour lire tu fais

procedure lire;

var Nb:integer;

begin

AssignFile(F1',nomdufichier');

Reset(F1);

Nb:=filesize(F1);

for i:=1 to NB do

begin

newPContact );

ListePoints.Add(PContact );

read( F1,PContact ^);

end;



end

;bonne prog
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
excuse moi j'ai oublie une instruction dans mon code

il fallait lire:

F1:file of TContact

procedure enregistre;

begin

AssignFile(F1,'nomdufichier');

rewrite(F1); // pour pouvoit ecrire dans le fichier

for i:=0 to TListContact .Count-1 do

begin

PContact :=TListContact .Items[i];

write(F1,PContact ^);

end;

closeFile(F1);// ferme le fichier en ecriture

end;

pour lire tu fais

procedure lire;

var Nb:integer;

begin

AssignFile(F1',nomdufichier');

Reset(F1);

Nb:=filesize(F1);

for i:=1 to NB do

begin

newPContact );

ListePoints.Add(PContact );

read( F1,PContact ^);

end;

closeFile(F1); // il vaut mieux fermer le fichier ICI

end;
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Heu j'vient de lire ton code, j'ai pas encore essayé car pour le moment j'peux pas, mais à première vu ta solution est un peu bancale non ? du moin ton code tel qui l'est ecrit là, ne fonctionnera pas !

En faite je chechait plus une solution orienté TfileStream ou un truc dans le genre qu'un simple Write dans une boucle.

Mais merci quand meme, c'est très sympa !
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

c'est que la solution est banale mais je t'assure qu'elle fonctionne pour l'utiliser dans un de mes programme.

Maintenant si tu veux passer effectivement par un TfileStream .

C'est vrai pourquoi faire simple quand on peut faire compliqué!!!
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Bon j'essaye et j'te dit :)

Merci.
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

d'ailleurs comme le code est un copie colle de mon code il en traine encore un morceau:

a la ligne:

ListePoints.Add(PContact );

il faut evidemment lire: ListContact.Add(PContact );
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
Arf j'en chie avec ta methode j'ai des erreurs de compilations dans tout les sens :s
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
çà marche

J'ai corriger pas mal de bug, qui venait entre autre de mon application, et j'ai integrer tout çà dans mon objet.

Sans toi j'y serai jamais arrivé

Merci jlen100.

Damien
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
J'ai fait un truc comme çà, mias çà merite d'etre un peu revu.
J'ai des probleme de débordement, faut que je corrige çà aussi...

{ Enregistre la liste des contact }
procedure TListContact.Enregistre( Fichier : string );
var
F : File of TContact;
i : Integer;
begin
AssignFile(F, Fichier);
rewrite(F);


for i:=0 to ( Self.Count-1 ) do
begin
Write(F, TContact( Self.Items[i]^ ) );
end;


CloseFile(F);
end;


{ Ouvre la liste des contacts }
procedure TListContact.Ouvre( Fichier : string );
var
F : file of TContact;
TailleFichier : Integer;
i : Integer;
K : PContact;
begin
AssignFile(F, Fichier);
Reset(F);
TailleFichier := FileSize(F);


for i := 1 to TailleFichier do
begin
New(K);
Read(F, K^ );
Self.Add(K);
end;


CloseFile(F);
end;

++

Damien
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

c'est vrai que dans mon appli il ne s'agissait pas d'une methoade de classe ce qui peut expliquer certains de tes problemes.

travaillant directement sur une liste et une variable record c'etait
plus simple,surtout que je n'utilsais qu'une fois ces procedure dans le
programme.

++