Lire dans un fichier binaire

Résolu
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 - 6 juin 2005 à 16:34
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 - 8 juin 2005 à 08:58
Bonjour à tous j'ai besoin d'aide pour lire dans un fichier binaire est ce que quelqu'un pourait m'aider? merci beaucoup.

10 réponses

jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 juin 2005 à 13:09
salut

ton fichier doit etre de la forme:

S:string;

Type

TrecData = Record

texte : string[XX];

autreschamps: sansimportance;

end;

texte peut etre situeer n'importe ou dans l'enregistrement;

attention ton TrecData doit etre l'image exacte d'un enrigistrement du fichier!!

recfich:file of TrecData ;

Tu obtiens un fichier typé qui offre les possibilités suivantes

connaitre le nombre d'enregistrements :

FileSise(recFich);

Lire directement un enregistrememt :

Seek(recFile,n); //positionne sur l'enregistrement a lire

data := read(f); //lit l'enregistrement

il te suffit allors d'extraire le champ texte

S:=recfich.texte;

bonne prog
3
Niki2001 Messages postés 85 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 17 décembre 2005 1
7 juin 2005 à 17:58
Euh... au passage, pour convertir byte et word en texte, on utilise InToStr et pour TDateTime on tuilise DateTimeToStr. Je suppose que tu le savais mais bon, on ne sait jamais...
3
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
6 juin 2005 à 16:44
salut,

quel type de fichier?

typé ou non typé?
0
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
7 juin 2005 à 08:51
c'est un fichier typé
0

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

Posez votre question
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
7 juin 2005 à 10:30
c'est un fichier typé donc je veux juste lire ce fichier et écrire les données lues dans un fichier texte
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 juin 2005 à 13:55
j'ai oublié avant de lire ton fichier n'oublie de l'ouvrir

AssignFile('nomdufichier',recfich);

reset(recfich);// pour l'ouvrir en lecture

puis CloseFile(recfich) pour le ferner;
0
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
7 juin 2005 à 14:57
en fait mon fichier binaire est un fichier typé avec des variables de type different c'est à dire que j'ai par exemple :
trecdata = record
inti : byte;
inti2 : byte;
str : string;
rom : word;
datheur : tdatetime;
donc si j'enregistre nimporte quel donné dans le fichier que je crée (par exemple dans un fichier texte) j'ai donc des caractères spéciaux non chifrable par exemple les date horaires sont remplacer par des !^$++ etc...et celà je veu le convertir en texte dans un fichier .txt.
si j'ai mi des byte , word, tdatetime au lieu de string c'est pour que le fichier qui sera creer ne soi pa enorme car j'ai fai un programme permettan denregistrer des donnée dans un fichier txt , bin,dat...via le port rs232 .ces données je les avais enregistré dans un fichier txt mais comme celuici était enorme et ainsi tro long a trier par un autre programme que j'ai fait,j'ai alor changer les string du record par d'autre variable afin d'avoir moins d'octet pour les fichier créer donc le probleme c'est: est ce possible lorsque je veu trier les données du fichier binaire de convertir celui ci en texte.J'ai déjà essayer la méthode que tu me propose jlen100 mais il recopie les caractères spéciaux du fichier binaire dans le fichier texte et moi je voudrai l'ecriture normal.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 juin 2005 à 15:08
je regarde ce que l'on peu faire mais une 1ere chose dans un fichier
typé il faut toujours declarer une longueur fixe au string ex
str:string[80]; sinon ton enregistrement est de longueur inderterminée
(je ne sais plus quelle valeur DELPHI donne par defaut a string)
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
7 juin 2005 à 15:36
je pense que ton probleme vient de ton string.

En effet DELPHI converti par defaut les string en
AnsiString c'est a dire des chaines a longueur
variable. donc a l'enregistrement les records ont des longueurs
variables et quand tu essaies de les relires DELPHI ne peut pas
connaitre la longueurs des enregistrements ce qui fait que tu as des
recouvrements des variables binaires et textes.

il est imperatif que tu fixe une longueur a ton string pour que tous les enregistrements ai la meme longueur.

un fichier sur disque peu se representer comme un tableau de caracteres
a une dimension ; quand tu declares un fichier typé ; pour lire le
Nieme enregistrement DELPHI se deplace de N*longueur de
l'enregistrement Ainsi si la longueur a changer entre temps DELPHI
adresse ....n'importe quoi !!!
0
elementalord Messages postés 26 Date d'inscription mercredi 25 mai 2005 Statut Membre Dernière intervention 10 juin 2005 1
8 juin 2005 à 08:58
en fait c'est bon il fallait que je crée 2 fichier typés l'un qui est en byte word ... l'autre en string et puis de faire une conversion byte,word...---> string comme tu as dit niki2001 que je le savais déjà mais que je t'en remercie tout de même pour preuve de ton aide,et ainsi je peux voir correctement des données dans un fichier texte car en fait dans le fichier binaire il est codé en ascii ,et je remerci à toi jlen100 de m'avoir aider également.
0
Rejoignez-nous