Lire dans un fichier binaire [Résolu]

Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
- - Dernière réponse : elementalord
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
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.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de jlen100
Messages postés
87
Date d'inscription
samedi 6 novembre 2004
Dernière intervention
17 décembre 2005
3
Merci
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...

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de Niki2001
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
salut,

quel type de fichier?

typé ou non typé?
Commenter la réponse de jlen100
Messages postés
87
Date d'inscription
samedi 6 novembre 2004
Dernière intervention
17 décembre 2005
0
Merci
De toute façon si tu veux lire un fichier le mieux est d'utiliser TFileStream. Tu pourras te renseigner sur la doc de Delphi. Il y a également sur le site des sources pour lire des fichiers de différentes façons. Je te proposerais bien la mienne (mais bon c'est comme tu veux et elle est bien sûr moins sûre que TFileStream): http://www.delphifr.com/code.aspx?ID=31416
Voila sinon pour les fichiers typés il y a d'autres méthodes mais c'est plus spécialisé.
Commenter la réponse de Niki2001
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
c'est un fichier typé
Commenter la réponse de elementalord
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
c'est un fichier typé donc je veux juste lire ce fichier et écrire les données lues dans un fichier texte
Commenter la réponse de elementalord
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
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;
Commenter la réponse de jlen100
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
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.
Commenter la réponse de elementalord
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
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)
Commenter la réponse de jlen100
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Dernière intervention
25 juillet 2014
0
Merci
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 !!!
Commenter la réponse de jlen100
Messages postés
26
Date d'inscription
mercredi 25 mai 2005
Dernière intervention
10 juin 2005
0
Merci
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.
Commenter la réponse de elementalord

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.