IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Modification d'un fichier


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Modification d'un fichier
    Bonjour à tous !

    Dans le cadre de mes études il m'est demandé de créer un projet en C++, celui-ci doit permettre a un utilisateur lambda de pouvoir creer, repondre et consulter les résultats d'un sondage.

    Cependant j ai un petit soucis lorsque mon utilisateur doit répondre au sondage.
    En effet j ai crée un fichier avec toutes les réponses de l'utilisateur et ce pour chaque sondage. Cependant ce fichier doit pouvoir être modifié et ce a chaque fois qu'un nouvel utilisateur y répond mais je ne vois pas qu'elle pourrait être la démarche.


    Pour vous expliquer un peu plus en detail j utilise ce fichier au sein d'une fonction , j'ouvre le fichier des données en lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FILE*fichierd;
    fichierd=fopen(strcat(d,"donnees.txt"),"r");
    Suivi par une suite de scanf pour la lecture des données du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fscanf (fichierd,"%d",&x.compteur);
    fscanf (fichierd,"%d",&x.nbfemme);
    fscanf (fichierd,"%d",&x.nbhomme);
    fscanf (fichierd,"%d",&x.nbage);
     
    fclose(fichierd);
    ensuite l'utilsateur repond aux questions
    ex ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cout<<"Etes vous une femme ou un homme ?"<<endl;
    cout<<"Cliquez 1 si vous etes une femme"<<endl;
    cout<<"Cliquez 2 si vous etes un homme"<<endl;
    cin>>sexe;
        if(sexe==1){
        x.nbfemme=x.nbfemme+1;
        }
        if (sexe==2){
        x.nbhomme=x.nbhomme+1;
        }
    =>incrementation

    Ensuite le fichier et réouvert afin de modifier les données en les incrémentant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    fichierd=fopen(strcat(d,"donnees.txt"),"w");
     
     
    fprintf (fichierd,"%d",x.compteur);
    fputc('\n',fichierd);
    fprintf (fichierd,"%d",x.nbfemme);
    fputc('\n',fichierd);
    fprintf (fichierd,"%d",x.nbhomme);
    fputc('\n',fichierd);
     
     
    fclose(fichierd);
    Or lorsque j exécute mon programme mon fichier avec mes données ne prend en compte que les résultats du dernier utilisateur or bien entendu pour ensuite pouvoir afficher des pourcentages il me faut bien sur les résultats de chaque utilisateur or je pensais qu en effectuant une lecture du fichier et en utilisant des incrémentations cela aurait marché or ce n 'est pas le cas.


    Je peux vous envoyer le programme si vous souhaitez plus de détails mais j’espère avoir été suffisamment claire

    Merci pour idées si vous en avez !

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 851
    Points : 2 293
    Points
    2 293
    Par défaut
    Tu devrais lire plus en détail le man de fopen. Le flag w ouvre le fichier en mode écriture et efface son contenu. Pour écrire à la fin sans tout effacer, je te laisse chercher dans le man quel est le bon flag.

    PS: tu pourrais laisser ton fichier ouvert quand t'as fini de lire les infos, le curseur sera déjà à la fin. Mais pour ça il faudra qu'il soit déjà ouvert en mode lecture / écriture.

  3. #3
    Membre éprouvé
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 417
    Points : 1 247
    Points
    1 247
    Par défaut
    Salut,

    A mon avis, le plus simple est de ne pas garder les résultats compilé dans ton fichier. Enregistre simplement les réponses sur une nouvelle ligne.
    Ainsi, pour consulter les résultats, il suffit de parcourir le fichier et de compter le nombre d'hommes est de femmes. La somme des 2 te donnant le nombre de répondants.
    Pour ajouter un résultat, il suffit d'ouvrir le fichier en append (flag a ou a+), et d'ajouter la réponse de l'utilisateur.
    Si ton sondage à plusieurs questions, tu peux mettre toute les réponses d'un utilisateur sur une même ligne en les séparant par des ";". C'est bien sur plus propre que de les mettre séquentiellement et de devoir compter les lignes pour savoir à quelle question une réponse appartient.
    Enfin, n'écris les résultats dans le fichier que lorsque l'utilisateur à répondu à toutes les questions. Ca t'assurera que tu ne tiens compte que des utilisateurs ayant répondu à l’assemble du questionnaire (si c'est bien le comportement que tu veux).

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Pour répondre à imperio j ai choisi d ouvrir mon fichier en W justement afin que mes incrémentations puissent se faire sur mes variables de mon fichier et donc ne pas m afficher les résultats de chaque sondage à la suite et justement je n arrive pas à les incrémenter à chaque fois que j ouvre mon fichier de données il ne me prend en compte que les résultats de la dernière personne sondée voilà mon problème

    Pour répondre à djuju merci de m avoir fait pensé au fait de ne prendre en compte les résultats du sondage que lorsque la personne a fini le sondage

  5. #5
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 851
    Points : 2 293
    Points
    2 293
    Par défaut
    Hum... Fort étrange... En gros si un homme puis une femme font se sondage, au final il n'y aura qu'une femme de compter et l'homme sera passé à la trappe. T'as déjà regardé si les valeurs que tu récupérais de ton fichier était les bonnes ? Le problème pourrait venir de là.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,



    Mon fichier de données me reprend bien les bons resultats mais seulement de la dernière personne qui y a répondu comme tu l as noté auparavant !

  7. #7
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    851
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 851
    Points : 2 293
    Points
    2 293
    Par défaut
    Dans ce cas il doit manquer quelque chose parce que ça ne me paraît pas logique. Le raisonnement est bon, d'après ce que tu me dis les valeurs sont bien récupérées. Dans ce cas d'où pourrait provenir le problème ? Tu as affiché toutes les valeurs à chaque modification pour voir si tout se passait correctement ?

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui à chaque fois que je reponds au sondage les données sont bien modifées mais il ne me prend pas en compte les resultats précédents !

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut lulOux

    Tu ne fais pas du C++ ici, tu manipules tes fichiers avec l'API C. Tu devrais jeter un oeil sur la FAQ et refaire ton programme à la sauce C++.

    L'API C est-elle imposée par ton professeur ?
    Find me on github

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2013
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,



    Non l'API C n'est pas imposé je t'avouerai même que je ne connais pas du tout ce terme !

    Je vais demander à mon professeur tout à l'heure pourquoi ca ne marche pas car je pense que le problème vient au niveau de l'ouverture du fichier et de la lecture des données car finalement en transformant un peu le programme j'ai bien vu qu il me faisait bien l’incrémentation mais le problème c'est qu'il me prend toutes mes données du fichier comme étant égales à 0

  11. #11
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    Ce que dit jblecanard, c'est que les structures et les fonctions que tu utilises pour manipuler tes fichiers (FILE*, fopen, etc.) c'est du C, et non pas du C++. Tout ceci est encore présent dans c++ pour des raisons de compatibilités. Quitte à apprendre le c++, autant apprendre le c++, et non le c.

    Pratiquement, au lieu de FILE* on utilisera la classe fstream et ses dérivés. Et au lieu de fscanf et fprintf, on utilisera les opérateurs de flux (<< et >>), comme avec cin et cout.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

Discussions similaires

  1. [Properties] Modif d'un fichier properties avec Commentaires
    Par snetechen dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/10/2006, 17h00
  2. Temps écoulé pour la modification d'un fichier
    Par pouet33 dans le forum Langage
    Réponses: 4
    Dernier message: 06/09/2005, 13h41
  3. Réponses: 20
    Dernier message: 17/03/2005, 16h26
  4. Est-il possible de détecter la modification d'un fichier ?
    Par Kokito dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/06/2004, 11h42
  5. [langage] Date de modification d'un fichier
    Par Cyspak dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2003, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo