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

cs_Squallou 250 Messages postés mardi 5 août 2003Date d'inscription 15 juillet 2006 Dernière intervention - 9 avril 2006 à 16:15 - Dernière réponse : EddiTheHead 60 Messages postés mercredi 16 février 2005Date d'inscription 2 juin 2006 Dernière intervention
- 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 60 Messages postés mercredi 16 février 2005Date d'inscription 2 juin 2006 Dernière intervention - 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

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de EddiTheHead
Meilleure réponse
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 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

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de Cirec
Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 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 250 Messages postés mardi 5 août 2003Date d'inscription 15 juillet 2006 Dernière intervention - 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 60 Messages postés mercredi 16 février 2005Date d'inscription 2 juin 2006 Dernière intervention - 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.