Comment lire les octets d'un fichier ? [Résolu]

cs_Squallou
Messages postés
250
Date d'inscription
mardi 5 août 2003
Dernière intervention
15 juillet 2006
- 9 avril 2006 à 16:15 - Dernière réponse : EddiTheHead
Messages postés
60
Date d'inscription
mercredi 16 février 2005
Dernière intervention
2 juin 2006
- 9 avril 2006 à 22:38
Hello tout le monde.

Je suis débutant et j'essaie tant bien que mal de me mettre aux fichiers.

Je sais que plusieurs sources pourraient répondre à ma question mais en les observant je me suis complètement paumé et je ne suis plus sûr de rien...

J'ai créé un fichier (C:\test.bin) bidon de 3 octets : 01 03 04 (hex)

Je voudrais tout simplement lire ces 3 octets et donc afficher 01 03 04 dans un TEdit.

Comment feriez-vous svp ?

Par avance merci :)
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
EddiTheHead
Messages postés
60
Date d'inscription
mercredi 16 février 2005
Dernière intervention
2 juin 2006
- 9 avril 2006 à 22:14
3
Merci
Slt,

...
Var Fichier : File Of Byte;
Octet : Byte;
...

// Ecrire le code ASCII du caractère 'A' dans un fichier
AssignFile(Fichier, 'Test');
Rewrite(Fichier);
Octet := 65;
Write(Fichier, Octet);
CloseFile(Fichier);

// Lire un caractère dans un fichier et l'afficher dans un TEdit
AssignFile(Fichier, 'Test');
Reset(Fichier);
Read(Fichier, Octet);
Edit1.Text := IntToStr(Octet); // Pour afficher le code ASCII
Edit2.Text := Chr(Octet); // Pour afficher le caractère
CloseFile(Fichier);

Merci EddiTheHead 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de EddiTheHead
Meilleure réponse
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 9 avril 2006 à 22:20
3
Merci
Salut,
voici deux exemples très simples:
Le premier va lire un octet après l'autre tant que la fin du fichier n'est pas atteint
Et la deuxième lit un block de 512 Octets maximum en une fois (même si il y en a plus où moins à lire)

// Lecture par Octet
procedure TForm1.Button1Click(Sender: TObject);
Var Fichier : File of Byte;
bt : Byte;
begin
Edit1.Clear; // On efface le contenu de l'edit
AssignFile(Fichier, 'C:\Test.bin');// On assigne le fichier à la variable
Reset(Fichier); // On l'ouvre
While Not Eof(Fichier) do // Tant que la fin du fichier n'est pas atteint...
Begin
Read(Fichier, bt); // Lecture d'un Octet
Edit1.Text := Edit1.Text + IntToStr(Bt)+ ' '; // Ajout dans l'Edit
End;
CloseFile(Fichier); // Et on le referme
end;


// Lecture par Block
procedure TForm1.Button2Click(Sender: TObject);
Var Fichier : File of Byte;
bt : Array[0..511] of Byte;
NbLu : Integer;
begin
AssignFile(Fichier, 'C:\Test.bin'); // On assigne le fichier à la variable
Reset(Fichier); // On l'ouvre
BlockRead(Fichier, bt, SizeOf(Bt), NbLu); // Lecture d'un Block d'octets
ShowMessageFmt('Lu %d : %d %d %d', [NbLu, Bt[0], Bt[1], Bt[2]]); // Affichage sous forme de MessageBox
CloseFile(Fichier); // Et on le referme
end;

Donc la première si il y a plus de trois Octets à lire dans ton fichier ben le tout sera lu
et le deuxième ne lira que 512 octets maximum et n'en affichera que les trois premiers

Voilà c'est peut être plus claire maintenant

@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de Cirec
Cirec
Messages postés
4229
Date d'inscription
vendredi 23 juillet 2004
Dernière intervention
3 août 2018
- 9 avril 2006 à 22:23
0
Merci
Salut EddiTheHead,
Désolé encore une fois j'ai pas rafraîchis avant de poster
@+
Cirec
Commenter la réponse de Cirec
cs_Squallou
Messages postés
250
Date d'inscription
mardi 5 août 2003
Dernière intervention
15 juillet 2006
- 9 avril 2006 à 22:37
0
Merci
Ok merci bien à vous deux j'ai de quoi faire et apprendre ^^
Merci :)
Commenter la réponse de cs_Squallou
EddiTheHead
Messages postés
60
Date d'inscription
mercredi 16 février 2005
Dernière intervention
2 juin 2006
- 9 avril 2006 à 22:38
0
Merci
Slt Cirec,

Ton exemple est de tout façon plus complet que le mien.
Je veux juste rajouter ceci :

// Pour afficher en héxa
Edit1.Text := IntToHex(Octet, 2); // 2 pour le nbre de digit
Commenter la réponse de EddiTheHead

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.