Travailler avec des fichiers typés sous delphi 5

Résolu
axeloflittoral Messages postés 7 Date d'inscription jeudi 25 septembre 2003 Statut Membre Dernière intervention 11 novembre 2009 - 28 févr. 2005 à 21:41
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 1 mars 2005 à 15:23
Salut tout le monde !

Voilà ! J'ai un petit souci en programmation.
Le truc c'est que dans l'entête de mon source j'ai déclaré un type de record qui va contenir des integers, des strings et des array.

Le souci c'est que je doit sauvegarder un moment donné ce type dans un fichier et le réouvir à un autre moment. Je suis au courant qu'il y a des problèmes et la vcl evolue en fonction des versions de delphi, j'ai essayé plusieurs trucs mais cela ne marche pas ! J'y arrive pas je désespère ! Les variable utilisées dans les autres varialbes déclarées sa merdouille de otut les bouts !!!!

Le truc qui pourrai m'aider correctement serai que je puisse avoir un zip avec un code source avec un exemple d'utilisation de fichier typé sous delphi 5 !

Merci d'avance !


http://www.axeloflittoral.fr.st

2 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
1 mars 2005 à 15:23
Re,



Tres bonne remarque de emmendhal tous les éléments de ton type doivent avoir un taille fini.



Pour les string tu peux faire comme ceci :

MaVar : String[50]; //ceci definit un string de 50 caractères.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
3
Emandhal Messages postés 194 Date d'inscription dimanche 2 mars 2003 Statut Membre Dernière intervention 10 octobre 2006 3
1 mars 2005 à 12:19
Une string ne peut être enregistrée dans un fichier en passant par un record parce qu'une String c'est tout d'abord un pointeur qui pointe dans la zone mémoire où est la chaine. Donc à l'enregistrement tu enregistres le pointeur et non la chaine. De ce fait, à la relecture, ce pointeur pointe plus du tout au bon endroit.

Dans ton record je te conseille, pour enregistrer ta chaine, de passer par un Array[0..x] of Char; où x est le nombre de caractères maximum de la chaine (Attention, maximum parce qu'il ne faut pas oublier le #0 d'indiquation de fin de chaine (donc ta chaine fera x+1 caractères)).
//Enregistrer une String dans un Array[0..x] of Char :
Const
STRMAX = 50; // Chaine de 50 caractères max
Var
MonArrayStr: Array[0..STRMAX] of Char;
MaString: String;
Begin
MaString := 'Ce que tu veux tant que ca fait que 50 char max'; // Length(Str) doit faire 50 au maximum
FillChar(MonArrayStr, Length(MonArrayStr), #0); // Pour remplire le tableau de Char #0 (pas nécessaire)
StrLCopy(MonArrayStr, MaString, Length(MonArrayStr)); // StrLCopy ajoute un caractère #0 de fin de chaine dans le tableau
// Enregistrement dans un Fichier ou ce que tu veux...
End;
// Pour la lecture y'a pas de prob, un Array of Char est considéré comme une String par Delphi donc c'est compatible (bien sur seulement s'il y a un Caractère #0 à la fin de la chaine (au pire à la fin du tableau)

De même pour ton Array, tu dois absolument lui définir une taille fixe avant d'enregistrer. ou alors trouver le moyen pour lui dire le nombre d'éléments de l'array avant de lire le record dans ton fichier. Ceci parce que "Delphi" n'enregistre pas la taille du Array dans le fichier, il faut donc la lui donner.

Tout problème a sa solution... Mais en général, c'est jamais la bonne...
0
Rejoignez-nous