Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1483 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c] structurer un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c] structurer un fichier

n°722140
diony11
Dieu du vin
Posté le 11-05-2004 à 16:34:45  profilanswer
 

bonjour,
j ai de grosses difficultés pour mettre un fichier dans une structure en C.
je vous explique , je réalise un projet sur une base de données de recettes enregistrées dans un fichier.
ma structure se présente sous la forme :
 
typedef struct recette { char nom[100];
                       struct ingredient * ing;
                       struct prepa * pr;
                       struct recette * re;
                       }recette;
 
typedef struct recette * livre;
 
typedef struct ingredient {char nom1[100];
                           int quantite;
                           struct ingredient * suiv;
                           }ingredient;
typedef struct prepa{int tps;
                     char facon[1000];
                     }prepa;
 
 
 
et mon fichier sous la forme :
 
Nom de la recette:ingredient1,quantité;ingrédient2,quantité;...:temps de préparation:instruction pour la recette
 
 
je galère trop  :pt1cable: !j ai beau avoir fait plein de recherches sur différents sites , je n ai rien trouvé qui pourrai m etre utile.je sais par contre qu on ne peut pas le faire avec fscanf car le nombre d ingrédient n est pas fixe.on ma conseillé de le faire avec strchr et strtok.pouvez vous m aider svp.


Message édité par diony11 le 11-05-2004 à 16:35:24
mood
Publicité
Posté le 11-05-2004 à 16:34:45  profilanswer
 

n°722151
Taz
bisounours-codeur
Posté le 11-05-2004 à 16:39:56  profilanswer
 

soit tu fais un fichier texte : tu utilises fscanf/fprintf
 
soit tu fais un fichier binaire (fread/fwrite)
mais dans ce cas t'es dans la merde, parce que tu as tout mélangé : un ingrédient n'est pas le maillon d'une liste.
 
donc si tu veux faire ça, il faut séparer les deux
 
struct ingredient {  ... }
struct maillon_ingredient { struct ingrédient i; struct maillon_ingredient *suivant;}
 
après, tu parcoures ta liste, et tu écris (ou lis) p->i

n°722292
diony11
Dieu du vin
Posté le 11-05-2004 à 18:13:24  profilanswer
 

je te remercie de m avoir répondu taz, c est très sympathique de ta part.
 
je crois pas qu il faut que je fasse un fichier binaire car j ai jamais vu cela en cours et puis ca a l air dur...
et fscanf c est pas possible car le nombre d ingredient varie en fonction de la recette.
en fait chaque recette se définie par
- son nom  
- un pointeur sur les ingrédients/quantité qui repointe ensuite sur l ingrédient suivant
- un pointeur sur les instructions de préparation de le temps nécéssaire  
-un pointeur sur la recette suivante
 
dans les instructions du projet , ils nous disent que les fonctions strtok ainsi que atoi(converti un string en int) seront très utiles .et soit disant c est possible de mettre le fichier dans la structure justement grace a strtok et strchr.
 
PLEASE HELP

n°722335
Taz
bisounours-codeur
Posté le 11-05-2004 à 18:49:00  profilanswer
 

le binaire est plus facile
 
- son nom  
- un pointeur sur les ingrédients/quantité qui repointe ensuite sur l ingrédient suivant
- un pointeur sur les instructions de préparation de le temps nécéssaire  
-un pointeur sur la recette suivante  
 
ça c'est ton organisation en mémoire ... à toi de te débrouiller pour trouver une organisation dans ton fichier
 
atoi est mauvaise : utilise strtol
strtok aussi, attention à l'utilisation
strchr ne t'es d'aucun recours
 
 
spa compliqué dans ton fichier tu ranges
 
 
NOM_DE_LA_RECETTE
INGREDIENT;INGREDIENT; ...
INSTRUCTION; INSTRUCTION; ...
 
 
t'as plus qu'a lire 3 lignes par 3, et extraire les informations

n°722392
gilou
Modérateur
Modzilla
Posté le 11-05-2004 à 19:21:40  profilanswer
 

Ou alors:
NOM_DE_LA_RECETTE  
nb d'ingredients
INGREDIENT
...
INGREDIENT
nb d'instructions
INSTRUCTION
...
INSTRUCTION
 
ou alors:
NOM_DE_LA_RECETTE
INGREDIENT
...
INGREDIENT
MARQUE_DE_FIN_D'INGREDIENTS
INSTRUCTION
...
INSTRUCTION
MARQUE_DE_FIN_D'INSTRUCTIONS
 
ou alors (my favorite :D)
<recette name = "NOM_DE_LA_RECETTE">
<ingredient>...</ingredient>
...
<ingredient>...</ingredient>
<instruction>...</instruction>
...
<instruction>...</instruction>
</recette>
 
A+,

n°722456
mordicator
Posté le 11-05-2004 à 20:24:39  profilanswer
 

dans son cas, je ne pense pas qu'un fichier en pseudo xml l'aidera...
a mon sens, il n'y a d'interet a utiliser du xml qu'avec un bon parseur xml, je penserais par exemple a xerces.
A priori dans son cas, pas de libs donc un format personnalise restera sans doutes le plus simple.
Utiliser des '\n' et ';' comme delimiteurs me parait tres bien, ca donne une sortie plutot propre, facile a parser (quelque soit le delimiteur en fait) mais je suggererais diony11 de verifier les caracteres admis dans les noms d'ingredients/recettes/instruction pour ne pas avoir de mauvaises (tres mauvaises ;) surprises par la suite!
 
enfin je dis ca, je dis rien :D

n°722469
diony11
Dieu du vin
Posté le 11-05-2004 à 20:47:41  profilanswer
 


je ne comprends pas tout ce que vous m avez écrit... en fait vous me conseillez , si j ai bien compris , de modifier mon fichier . Mais je ne peux pas , le projet impose d utiliser le format : Nom de la recette:ingredient1,quantité;ingrédient2,quantité;...:temps de préparation:instruction pour la recette \n
je peux pas le modifier , il fo que je travaille avec , et donc forcément avec les délimiteurs \n , ; et :.
pour le xml , je connais pas du tout , et ca m étonnerait que j ai a l utiliser.
mais voila je patoge complètement!
 

n°722470
Taz
bisounours-codeur
Posté le 11-05-2004 à 20:54:49  profilanswer
 

et alors, le format qui t'es imposé va très bien bordel  :o

n°722472
Taz
bisounours-codeur
Posté le 11-05-2004 à 20:55:00  profilanswer
 

mets toi au boulot bordel :o

n°722474
prettysmil​e
Sourire est un devoir social
Posté le 11-05-2004 à 20:58:04  profilanswer
 

diony11 a écrit :

je ne comprends pas tout ce que vous m avez écrit... en fait vous me conseillez , si j ai bien compris , de modifier mon fichier . Mais je ne peux pas , le projet impose d utiliser le format : Nom de la recette:ingredient1,quantité;ingrédient2,quantité;...:temps de préparation:instruction pour la recette \n
je peux pas le modifier , il fo que je travaille avec , et donc forcément avec les délimiteurs \n , ; et :.
pour le xml , je connais pas du tout , et ca m étonnerait que j ai a l utiliser.
mais voila je patoge complètement!

[:ark]  
 
essai de lire ça :
http://www.programmationworld.com/site/Cours.asp?Action=cours&Numero=109#_topic_14
 

mood
Publicité
Posté le 11-05-2004 à 20:58:04  profilanswer
 

n°722503
diony11
Dieu du vin
Posté le 11-05-2004 à 21:13:30  profilanswer
 

c gentil prettysmile , je sais comment marche strtok.
t inquietes pas j ai deja essayé google,mais j ai rien trouvé qui pourrait m aider pour a l utilisé pour les structures

n°722506
Taz
bisounours-codeur
Posté le 11-05-2004 à 21:18:00  profilanswer
 

ok, donc t'as rien bité

n°722508
mordicator
Posté le 11-05-2004 à 21:18:25  profilanswer
 

diony11 a écrit :

je ne comprends pas tout ce que vous m avez écrit... en fait vous me conseillez , si j ai bien compris , de modifier mon fichier . Mais je ne peux pas , le projet impose d utiliser le format : Nom de la recette:ingredient1,quantité;ingrédient2,quantité;...:temps de préparation:instruction pour la recette \n
je peux pas le modifier , il fo que je travaille avec , et donc forcément avec les délimiteurs \n , ; et :.
pour le xml , je connais pas du tout , et ca m étonnerait que j ai a l utiliser.
mais voila je patoge complètement!


 
Effectivement tu patoges!
Meme si tu ne comprends pas, tu peux et tu dois rester logique par rapport a ce que tu sais!
Tu as un format impose? tres bien, pourquoi ne pas avoir commence par la en le disant CLAIREMENT...
Ensuite, si tu regardais de plus pres ton format et celui propose par Taz, tu verrais que c'est quasiment la meme chose, la logique pour generer l'un et l'autre sera identique, ce n'est qu'une question de formatage!
Vu ton niveau, si tu veux t'en sortir, t'as interret a essayer sur le papier deja de definir clairement ce que tu as et ce que tu veux. Ensuite reflechis a comment passer de l'un a l'autre!
Fais des petits schemas avec fleches et boites, du pseudo-code, ce que tu veux, mais si tu ne maitrise pas parfaitement ton langage, tu ne pourra jamais passer outre cette etape!
Deja qu'en maitrisant c pas toujours facile (et rarement reccomande, quoique pour cet exemple je m'en passerais volontier ;)
 
Donc je t'aide un peu...
 
Tu as des structures qui chacune represente un de tes elements. Tu sais comment tes donnees sont representes dans le programme, les liens entre les differentes structures. Bien, ensuite tu sais a quoi doit ressembler une recette complete (soit une structure recette, plusieurs ingredients, plusieurs instructions) dans ton fichier texte. Essaye avec un exemple simple, genre une recette avec 1 ingredient et 1 instruction et compare le contenu des structures avec le fichier texte. Tu devrais voir comment ont 'voyages' les donnees. Ensuite, complique avec un autre exemple avec plusieurs ingredients et plusieurs instructions. Pareille, regarde comment les donnees on voyages...
Sans t'en rendre compte, tu as tout seul trouve le cheminement des donnees pour passer des structures au fichier lorsque tu as fait ca sur le papier!
Reste plus qu'a identifier etape par etape ce que tu as fait dans ta tete et a formaliser ca a l'aide de fonctions.
Et hop, tu viens tout seul de creer ton propre algorithme et je te rassure, si tu as bien reflechi, ca marchera!
 
Voila, bon, j'ai pris le temps de te repondre avec un long post car j'avais vraiment rien d'autre a faire mais que ca devienne pas une habitude ;)

n°722518
diony11
Dieu du vin
Posté le 11-05-2004 à 21:30:15  profilanswer
 

ok je te remercie mordicator.effectivement j avais oublié de précisé que le format était imposé.par contre je viens d avoir une idée : modifier le format sur un fichier temporaire.jvé testé.

n°722519
Taz
bisounours-codeur
Posté le 11-05-2004 à 21:31:13  profilanswer
 

n'importe quoi ... mais putain, tu lis la ligne et voilà :o

n°722605
gilou
Modérateur
Modzilla
Posté le 11-05-2004 à 23:09:09  profilanswer
 

mordicator a écrit :

dans son cas, je ne pense pas qu'un fichier en pseudo xml l'aidera...
a mon sens, il n'y a d'interet a utiliser du xml qu'avec un bon parseur xml, je penserais par exemple a xerces.
A priori dans son cas, pas de libs donc un format personnalise restera sans doutes le plus simple.
Utiliser des '\n' et ';' comme delimiteurs me parait tres bien, ca donne une sortie plutot propre, facile a parser (quelque soit le delimiteur en fait) mais je suggererais diony11 de verifier les caracteres admis dans les noms d'ingredients/recettes/instruction pour ne pas avoir de mauvaises (tres mauvaises ;) surprises par la suite!
 
enfin je dis ca, je dis rien :D

Pour parser du XML bien formé, tu as pas besoin de xerces, expat suffit, et c'est ultra leger.
 
Sinon, diony11, ce que tu veux faire n'est pas tres dur, a condition de faire gaffe a ce que tu veux parser.
Ce que tu veux parser:
1- recuperer tout jusqu'a un : ==> ca te donne le nom de la recette
2- tu sautes le :
3- recuperer tout jusqu'a une , ==> ca te donne le nom du premier ingredient
4- tu sautes la ,
5- recuperer tout jusqu'a un ; ou un :  ==> ca te donne la quantite du premier ingredient  
6- si tu es en un ; tu le sautes et retourne en 3, sinon tu es en un : tu le sautes
7- recuperer tout jusqu'a un : ==> ca te donne le temps de preparation de la recette
9- tu sautes le :
10- recuperer tout jusqu'a un \n ==> ca te donne la premiere instruction pour la recette
etc
(pas claire ton histoire: comment on sait qu'on arrive a une nouvelle recette? ca serait pas plutot instruction;instruction;...instruction\n ton format? auquel ca, le \n serait le delimiteur entre chaque recette)
 
Si tu etudies bien la documentation de strtok, tu verras comment l'utiliser pour faire les parties "recuperer tout jusqu'a un ..."
 
A+,


Message édité par gilou le 11-05-2004 à 23:28:10
n°722697
diony11
Dieu du vin
Posté le 12-05-2004 à 01:01:50  profilanswer
 

oui gilou , c est tout a fait ce que je souhaite faire.g un bon pote qui ma expliqué un peu la marche a suivre , et il faut alterner les strtok et les strchr pour bien se positionner dans le fichier.oui c est bien le \n le delimiteur de chaque recette.
sinon pour l idée du fichier temporaire , g vite abandonné.
jvous remercie ,mon programme ne marche tjrs pas mais j y vois plus clair.


Message édité par diony11 le 12-05-2004 à 01:02:41

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c] structurer un fichier

 

Sujets relatifs
Lecture de fichierjava- lire une liste dans un fichier
Boucler sur les lignes d'un fichier texte (shell UNIX)Problème ftp() upload fichier + 9Mo help
envoit fichier reseaufabriquer un fichier xls
remplacer tous les accents d'un fichier donné[ASP.NET][C#]ecriture d'un fichier xml
Pb de recherche dans un fichierTester existance d'un fichier
Plus de sujets relatifs à : [c] structurer un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR