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 :

Quel est le problème dans ce code ?


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut Quel est le problème dans ce code ?
    J'ecris un programme qui me permette de modifier les informations incluses dans un fichier texte.
    Le fichier texte contient deux colonnes, une avec les noms des objets et une autre avec leur valeu associée.
    Voici le code que j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    FILE* CFG;
    CFG=fopen(fichCFG,"rt+");	//? il faut que j'ouvre le fichier en modification
    if(CFG !=NULL)	// on réussi à lire le fichier (il existe)
     {
     char	valeur[32];		// valeur devant le mot clef
     char	valtmp[4];
     char oneword[32];
     int egalite=0;
     while(!feof(CFG)) // tant qu'on a pas atteint la fin du fichier
     {
        fscanf(CFG,"%s",oneword);
        if(strcmp(oneword, "MotRecherche") == 0) //le mot est trouvé
        {							
          fprintf(CFG,"%s ",ValeurduMot);
         // --j'ai aussi essayé
         //------------   fwrite(ValeurduMot,sizeof(ValeurduMot),1,CFG);
        egalite=1;
        }
    }
    Lorsque j'execute ce programme, egalite prend la valeur 1, ce qui veut dire que le mot recherché est trouvé.
    Mais, je ne comprend pas pourquoi il la nouvelle valeur du mot (ValeurduMot)?
    En fait, s'il veut ecrire, devra ecrire à la place de l'ancienne valeur, est ce cela le problème ?
    Voici un exemple du contenu de mon fichier txt.
    une colonne pour le mot recherché et une deuxième pour sa valeur


    • NomDuHero Tom
      Puissance 4
      Age 36
      CodeArme 37
      CodeLangue FR
      ....

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Je t'avoue que je ne comprens pas trés bien ce que tu désire faire et où se trouve ton problème alors si tu pouvais être un peu plus clair.
    @++.

  3. #3
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    déjà, ValeurduMot n'est pas declare ici, comment tu l'as déclaré? Car le probleme vient peut etre du sizeof(ValeurduMot).

    Comment initialises tu cette valeur?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut plus clairement
    En fait voilà ce que je voudrais faire:
    si l'on prend une partie du fichier texte:
    • NomDuHero Tom
      Puissance 4
      Age 36
      CodeArme 37
      CodeLangue FR


    j'aimerais maintenant changer la puissance de mon hero et lui mettre une puissance egale à 9 et sauvegarder le tout dans le même fichier soit:
    • NomDuHero Tom
      Puissance 9
      Age 36
      CodeArme 37
      CodeLangue FR
      ...


    il se trouve que le programme réussi à detecter le terme puissance mais,
    lorsque je lui demande d'ecrire 9 comme nouvelle valeur, il ne le fait pas.
    voici l'instruction d'ecriture que j'effectue:




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf(CFG,"%s ",ValeurduMot);
    // -- j'ai aussi essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(ValeurduMot,sizeof(ValeurduMot),1,CFG);

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut La valeur du mot et connue
    la valeur du mot bien connue car en mode debug,
    je réussi à voir la valeur de mon mot.

  6. #6
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Directeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 337
    Points : 130 282
    Points
    130 282
    Billets dans le blog
    1
    Par défaut
    C'est normal. Tu essayes de lire et d'écrire à la fois dans un fichier texte. Ce n'est pas possible, tu ne peux pas le faire directement.

    Tu dois lire ton fichier source, et écrire dans un nouveau fichier. Quand tu auras fini de traiter le fichier source, tu pourras le fermer, l'effacer, et renommer le fichier cible dans le nom de ton fichier source.
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  7. #7
    Membre habitué
    Avatar de barthelv
    Inscrit en
    Mars 2003
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 267
    Points : 126
    Points
    126
    Par défaut
    Comment initialises tu ValeurDuMot???

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut à quoi sert l'instruction fopen (fichier,"r+")
    Je pensais que l'instruction fopen (fichier,"r+"); permettait d'ecrire et de modifier à la fois un fichier.
    C'est possible que cela soit le problème dans mon code en ce moment, je serai effectivement obligé de faire le programme en deux etapes.

    Mais franchement, a quel moments peut-on utiliser le fopen (fichier,"r+"); ?

  9. #9
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Oui mais le r+ c'est pour ecrire oui, mais ajouter des données...
    Toi ce que tu cherches à faire, c'est en fait supprimer le 4 et mettre un 9 à la place. IL n'existe pas de moyen de supprimer des données d'un fichier... la seule solution étant celle donnée par Anomaly.
    Tu créer un autre fichier dans lequel tu réecris toutes les données sauf au moment ou tu trouve le 4 (après puissance). Là, tu ecrit un 9 à la place... puis tu continues la copie après jusqu'à la fin. Tu supprime l'ancien fichier, et tu renomme le nouveau avec le meme nom que l'ancien.

    Nas'

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2003
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Bon j'ai une solution peut être un peu plus simple pour toi.
    Tout d'abord tu ne crée pas de second fichier car je trouve que c'est une perte de temps.
    Donc tu l'ouvre en lecture "r" et tu cherche ton mot.
    Lors que tu l'a trouver tu enregistre ta position dans le flux avec ftell().
    bien sur tu aura donc la position aprés fscanf donc juste aprés le mot que tu cherché.
    Ensuite tu referme ton flux et tu l'ouvre cette fois-ci en écriture et tu déplace dedans avec fseek() en allant à la position que tu a récupéré auparavant en lui ajoutant 1 pour te retrouver sur le chiffre et pouvoir le changer (tu ajoute 1 car aprés ton mot il y a un espace).
    Enfin tu écris ton nouveau chiffre et tu refermes ton flux et en théorie c'est bon.
    Voilà j'espère avoir pu t'aider.
    @++.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut Merci,
    je vais l'essayer et je vous referai signe si ca marche

  12. #12
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Normalement si ton fichier est ouvert en mode lecture et ecriture et si la donnee a ecrire a le meme nombre de caractere que la donnee preesente ce devrait fonctionner. Par contre il faut avant d'ecrire se placer sur le caractere a remplacer. De plus je ne suis pas certain que tous les compilateurs prennent correctement le mode rt+, essaies plutot r+t

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 159
    Points : 171
    Points
    171
    Par défaut Merci
    Citation Envoyé par tchingoo
    Donc tu l'ouvre en lecture "r" et tu cherche ton mot.
    Lors que tu l'a trouver tu enregistre ta position dans le flux avec ftell().
    ... Ensuite tu referme ton flux et tu l'ouvre cette fois-ci en écriture et tu déplace dedans avec fseek() en allant à la position que tu a récupéré auparavant en lui ajoutant 1 pour te retrouver sur le chiffre et pouvoir le changer (tu ajoute 1 car aprés ton mot il y a un espace).
    Enfin tu écris ton nouveau chiffre et tu refermes ton flux et en théorie c'est bon.
    Voilà j'espère avoir pu t'aider.
    @++.
    En effet, cette dernière solution m'a éclairé l'espit.
    J'ai fais une duplication de mon fichier initial grace à la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BOOL bFailExist=NULL; 
    CopyFile("fichier.txt","temp.cfg",bFailExist);
    Ensuite, je recherche mon mot dans le fichier initial, lorsque je l'ai trouvé, je récupère ma position grace à ftell.
    Et j'ouvre mon fichier temporaire en écriture et grace à fseek, j'ecris à la position determinée precedemment (j'ajoute 1 bien sur).

    Et ca marche. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le problème dans cette ligne ?
    Par alaa1993 dans le forum Android
    Réponses: 7
    Dernier message: 31/01/2014, 12h54
  2. Où est le problème dans ce code
    Par alidroos dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/12/2011, 15h58
  3. [XL-2007] une formule dans une macro ne fonctionne pas je ne sais pas quel est le problème
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/11/2010, 12h59
  4. [DOM] quel est l'erreur dans mon code
    Par une_tite_question dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 10/08/2008, 11h20
  5. QUEL EST LE PB DANS MA REQUETE????
    Par macadam dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/05/2004, 07h38

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