Lire dans un fichier binaire [Résolu]

Signaler
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
-
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
-
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

Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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
Messages postés
85
Date d'inscription
samedi 6 novembre 2004
Statut
Membre
Dernière intervention
17 décembre 2005
1
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...
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,

quel type de fichier?

typé ou non typé?
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
1
c'est un fichier typé
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
1
c'est un fichier typé donc je veux juste lire ce fichier et écrire les données lues dans un fichier texte
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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;
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
1
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.
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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)
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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 !!!
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Statut
Membre
Dernière intervention
10 juin 2005
1
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.