Comment lire les octets d'un fichier ?

Résolu
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006 - 9 avril 2006 à 16:15
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre 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 :)

5 réponses

EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
9 avril 2006 à 22:14
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);
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 avril 2006 à 22:20
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
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
9 avril 2006 à 22:23
Salut EddiTheHead,
Désolé encore une fois j'ai pas rafraîchis avant de poster
@+
Cirec
0
cs_Squallou Messages postés 249 Date d'inscription mardi 5 août 2003 Statut Membre Dernière intervention 15 juillet 2006
9 avril 2006 à 22:37
Ok merci bien à vous deux j'ai de quoi faire et apprendre ^^
Merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EddiTheHead Messages postés 58 Date d'inscription mercredi 16 février 2005 Statut Membre Dernière intervention 2 juin 2006
9 avril 2006 à 22:38
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
0
Rejoignez-nous