Utiliser des fichiers binaire

cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 - 16 sept. 2005 à 16:55
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 - 17 sept. 2005 à 11:10
Bonjour à tous,



Je sais, vous allez dire que je suis un noob.



Effectivement, pour cette partis je suis un noob.



Je voudrais pouvoir écrire dans un fichier, de plusieurs manière differente:

- écrire normalemnt des chaines de caratères.

- écrire en integer

- et écrire en héxadécimal.



Pour chacune des choses, je sais faire, mais quand il faut combiner les
2, je sais pas le faire, car je trouve pas par quel mode je dois
accéder au fichier(si je dois y acceder en file of byte, etc...).

A chaque fois que j'enregistre, c'est à la fin du fichier bien entendu.



Si quelqu'un pouvait m'ndiquer un tuto pour m'expliquer ce serait vraiement sympa.



Merci d'avance.



P.S.: pour ceux qui veulent savoir, c'est parce que je bodsse sur un
MMORPG, et je doit faire l'utilitaire, et j'ai besoin d'écrire en byte,
peut être en word et dword, en string et en héxa).

4 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
16 sept. 2005 à 17:54
salut,

1)

tu peux tout convertir en texte puisque c'est le seul format qui soit compatible avec tout les types.

tu peux enrengistrer chaque données comme une chaine c'est le plus simple tant pour écrire que pour relire.

2) si tes enregistrements peuvent être structurés tu peux déclaré un
type record , creer un file of ' typerecord' et ouvrir ton fichier par
assignfile;

3) si tes enregistrements comportent une partie fixe et une partie
variable tu fait comme précédemment en d"clarant en fin de record une
partie variable voir aide DELPHI :Partie variable des enregistrements

dans ces 2 cas tu lis avec read et tu écris avec write d'autre part tu peux accéder directement a un enregistrement avec seek

4) si aucune structure ne peut être définie soit tu passes en 1)
soit tu passes par des descripteurs de champs (exemple : 1octet pour le
type + 4 octets pour la taille+les données ..chaines ,integer,
date,record, liens.....),mais là c'est infiniment plus compliqué
puisque tu en arrives à faire une gestion de base de données.

bonne prog
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 sept. 2005 à 22:00
Un excellent point de départ pour débuter : le Guide Pascal et Delphi de Frédéric BEAULIEU.
Voir chapitre XI, Utilisation des fichiers.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_christophedlr Messages postés 267 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 23 août 2023 5
17 sept. 2005 à 10:38
[auteurdetail.aspx?ID=304728 jlen100],



Le probl, c'est que je peus pas convertir(ou en tous cas je ne sais pas
le faire), les données héxadécimal, par exemple dans mon fichier, tu
aura une valeur chaine, puis en héxa 00, qui correspond à un caractère
nul, puis une valeur chaine, puis valeur word, dword etc...





[auteurdetail.aspx?ID=3267 Delphiprog],



Je vien de commancer à lire le lien que tu m'as filer, pour mes
enregistrements, ca marhcerait si j'utilisait les blockread et
blockwrite ? puisqu'il n'y a pas de type particulier, je peus utiliser
les valeur en héxa, chaine, word, dword, integer etc... ?
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
17 sept. 2005 à 11:10
salut,

je ne comprends pas bien. est ce que tu veux lire un fichier existant ou est ce que tu veux l'écrire.

si tu tu veux écrire le fichier; l'hexadecimal n'étant qu'une
représentation sous forme d'une chaine d'une valeur binaire rien ne
t'empêche de l'écrire comme un word ou un integer par exemple
hexa 00= 0 ou hexa FF= 255.

Pour convertir une chaine hexa en binaire utilise

function HexToBin(Text, Buffer: PChar; BufSize: Integer): Integer

mais il est plus simple de convertir en décimal en inversement pour
savoir si ta chaine est un nombre le codage en decimal permet de le
vérifier plus facilement :

function verif(text:string):boolean;

const Valid = [ '0'..'9'];

begin

result:= true;

for i: =1 to length(chaine)

begin

if not (chaine[i] in valid) then

begin

result:=false;break;

end;

end
0
Rejoignez-nous