Utilisation des Fichiers binaire et texte

romca
Messages postés
48
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
19 avril 2010
- 17 févr. 2005 à 23:18
cs_rabi3a
Messages postés
2
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
15 mai 2008
- 15 mai 2008 à 15:22
Salut à tous, j'ai un exercice à faire et je sais pas par ou le commencer.
On décrit une structure avec de champs bien précis.
Dans la première question on me demande de "creer une fonction qui permette
de créer à partir de cette structure un fichier séquentiel binaire".

Je me pose 2 questions:
1) On ne me precise pas de créer forcément avant une strucure de données
(type "struct nomdelastrucure").Alors j'en deduis la question 2:
2) Si je suis pas obligé de la créer, j'en deduis qu'un fichier peut comprendre
plusieurs champs de type différent? Est ce posssible?
Mais comment faire alors en utilisant les fonctions fopen() et fwrite() par ex?
Par ex pour inclure dans un fichier de nom "fichier" les champs "num" type int, et
même un tableau comme tableau[20], tout ça dans le même fichier?
Et comment ça s'organise au niveau du fichier?

Merci de vos réponses, ça m'aiderai vraiment.

8 réponses

ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
18 févr. 2005 à 09:10
Un fichier n'est autre qu'une suite d'octets stockés sur le disque. L'interprétation que l'on en fait dépend du contexte. Si tous les octets sont des caractères ASCII affichables alors on pourra parler de fichier texte sinon c'est du binaire pur. Dans ce cas les données peuvent être n'imporque quoi (des entiers, des flottants, des chaînes de caractères, des structures...).

Pour ton exo, tu as une structure de données qui contient une suite de champs nommés avec un type précis, mais en mémoire ce ne sera qu'une suite d'octets que tu adresse dans ton code à partir des éléments de la structure. En fait lorsque tu accède à un élément de ta structure, le compilateur y accède en ajoutant un offset à l'adresse de début de la structure en mémoire de manière transparente pour le programmeur. Cette suite d'octets peut donc être écrite telle quelle dans un fichier avec fwrite et relue avec fread (pour peu que le fichier soit ouvert en mode binaire b). Les octets auront donc une signification en utilisant la structure de données.
0
victorcoasne
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
18 févr. 2005 à 11:28
Bonjour,



Sont passés où mes 2 messsages d'avant ?





Merci,



Le créateur du site http://www.victorlogiciels.com
0
romca
Messages postés
48
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
19 avril 2010

18 févr. 2005 à 11:33
Ok merci de tes explications claires.

Donc si je comprend bien je ne peux pas mélanger dans un même fichier
des champs ASCII et binaire.
Donc dans mon exo je suis obligé de creer une structure de donnée avec
des champs différents mélangés type ASCII et binaire.
(Car dans l'enoncé un champs de cette structure est de type char chaine
de caractères (exactement responsable[21] ou il y aura un nom de responsable ).
Puis, j'accède (à cette structure) en créant un fichier (exemple "nomfichier").
Si je veux donc rentrer les données du tableau responsable[21] dans "nomfichier"
je ne pourrais pas, je suis donc obligé sinon d'en creer un autre.

Est ce que j'ai bon?
0
ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
18 févr. 2005 à 11:55
Dans un fichier tu met ce que tu veux. De l'ASCII c'est du binaire (avec seulement un sous-ensemble de valeurs possible).

un exemple de structure complexe:

struct MySousStruct
{
char s[12];
int tableau[64];
};

struct MyStruct
{
char chaine[32];
int entier;
float flottant;
MySousStruct tableaudestruct[4];
};

pour socker dans un fichier :
MyStruct toto;
FILE* file = fopen("toto.bin", "wb");
fwrite(&toto, sizeof(MyStruct), 1, file);

pour lire :
FILE* file = fopen("toto.bin", "rb");
fread(&toto, sizeof(MyStruct), 1, file);

Le point imporant à ne pas oublier c'est que l'ASCII c'est des octets comme n'import quelle autre variable sauf que ces octets ont signification particulière parce que on a decidé de faire une association entre les octets et des caractères alphanumérique et d'en faire un standard. Au niveau matériel, (mémoire disque) on se fout de savoir si c'est de l'ASCII ou pas, c'est des octets. C'est l'appli qui doit savoir la signification des octets qu'elle manipule (on recopiant une suite d'octets dans une structure avec des champs qui donnent du sens au binaire).
0

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

Posez votre question
romca
Messages postés
48
Date d'inscription
mercredi 26 janvier 2005
Statut
Membre
Dernière intervention
19 avril 2010

19 févr. 2005 à 11:18
Merci beaucoup, ymca2003 j'ai bien compris maintenant.
Réponses claires et précises, avec des exemples, que demander de plus!! Super!!
Je vais pouvoir commencer et finir cet exercice. Mais le plus important c'est
que j'ai bien pigé.
Salut Victorcoasne, désolé j'ai pas reçu tes messages mais merci quand même.

Salut à tous.
0
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
17 avril 2005 à 17:21
Je travaille aussi sur les fichiers en ce moment et j'aurai aimé savoir aprés ta lecture avec :
FILE* file = fopen("toto.bin", "rb");
fread(&toto, sizeof(MyStruct), 1, file);

comment tu faisais pour afficher le contenu de ton fichier
J'ai essayé avec :
cout << toto << endl;

mais il me retourne une erreure, y a t-il une fonction spéciale?
0
ymca2003
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
18 avril 2005 à 09:04
Il faut afficher un par un les membres de la structure car l'opérateur << n'est pas défini pour elle. L'autre solution est de surcharger cet opérateur (je ne sais plus la syntaxe exacte).
0
cs_rabi3a
Messages postés
2
Date d'inscription
vendredi 28 décembre 2007
Statut
Membre
Dernière intervention
15 mai 2008

15 mai 2008 à 15:22
je veux savoir comment faire la gestion de bibliothèque en java(jcreator)
0