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 7
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 1101 Date d'inscription jeudi 24 avril 2003 Statut Membre Dernière intervention 23 juillet 2023 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 7
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 7
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
Rejoignez-nous