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 :

Ecriture avec r+


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut Ecriture avec r+
    Bonjour,

    J'ai quelques problèmes avec l'ouverture d'un fichier

    La première partie de mon programme ouvre un fichier html en lecture et un txt en écriture.
    Les données du html sont lue ligne par ligne traité et renvoyer dans le txt.
    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
     
        FILE* fichier = NULL;
        FILE* fichiertxt = NULL;
        FILE* txtlectecr = NULL;
        ...
        fichier = fopen("gromel3019.html", "r");
        fichiertxt = fopen("gromel.txt", "w");
     
     
        if ((fichier != NULL)||(fichiertxt != NULL))
        {
            while (fgets(ligne, MAX, fichier) != NULL)
            {
        traitement...
            }
        }
        fclose(fichier);
        fclose(fichiertxt);
    Cette partie du programme fonctionne mais voilà il me faut ensuite travailler à nouveau sur le fichier gromel.txt;
    En effet le fichier html me donne des informations que je voudrais ecrire plus haut dans le fichier txt.
    Lors du traitement de la 1ere partie j'ai donc enregistré ces données dans un tableau pour les ajouter au fichier txt dans la 2eme partie
    J'ouvre donc à nouveau mon txt mais cette fois en mode "r+" car il vas falloir que je puisse m'orienter dans le fichier. Les ligne où je veux travailler ne contiennent que "\n".
    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
     
            fclose(fichier);
            fclose(fichiertxt);
            txtlectecr = fopen("gromel.txt", "r+");
            if (txtlectecr != NULL)
                {
                incrnote=0;
                while (fgets(ligne, MAX, txtlectecr) != NULL)
                {
     
                    if ((strcmp(ligne, "\n")==0)){
                        fputs("note",txtlectecr);
                        printf("note=%d",incrnote);
                        incrnote= incrnote +1;
                    }
                }
                }
    J'ai minimisé le code au maximum pour trouver l'erreur, le code trouve bien bien toutes les lignes "\n"(il y en as 253) mais "note" n'est pas écrit dans les ligne \n du txt... Le txt n'est absolument pas modifié. Aparament l'erreur vient vraiment du code ci dessus.
    Merci de votre aide,
    Neo

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Attention, quand un fichier est ouvert avec r+ tu peux écrire dedans mais tu vas être en mode remplacement.

    Regarde ce code :
    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
     
    #include <stdlib.h>
    #include <assert.h>
    #include <stdio.h>
     
    int main (void)
    {
        FILE *f = fopen ("test", "w");
        assert (f);
        fprintf (f, "Hello World\n");
        fclose (f);
     
        f = fopen ("test", "r+");
        assert (f);
        fprintf (f, "Why not?\n");
        fclose (f);
        return EXIT_SUCCESS;
    }
    et regarde ce que j'obtiens dans le fichier test après:
    Why not?
    ld
    Jc

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Attention, quand un fichier est ouvert avec r+ tu peux écrire dedans mais tu vas être en mode remplacement.

    Regarde ce code :
    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
     
    #include <stdlib.h>
    #include <assert.h>
    #include <stdio.h>
     
    int main (void)
    {
        FILE *f = fopen ("test", "w");
        assert (f);
        fprintf (f, "Hello World\n");
        fclose (f);
     
        f = fopen ("test", "r+");
        assert (f);
        fprintf (f, "Why not?\n");
        fclose (f);
        return EXIT_SUCCESS;
    }
    et regarde ce que j'obtiens dans le fichier test après:


    Jc
    J'ai modifié mon code pour laisser de la place là où je dois entrer mon texte.
    Mais je n'ai toujours aucune modification du fichier txt en r+...
    Dans ma partie 1 je laisse assez de place:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                            sprintf(avis,"Avis %d\n           \n", numavis);
                            fputs(avis,fichiertxt);
    J'ais modifié le test de la partie 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            if (txtlectecr != NULL)
                {
                incrnote=0;
                while (fgets(ligne, MAX, txtlectecr) != NULL)
                {
     
                    if ((strcmp(ligne, "           \n")==0)){
                        fputs("note",txtlectecr);
                        printf("note=%d",incrnote);
                        incrnote= incrnote +1;
                    }
                }
                }
    J'ais un txt avec assez d'espace mais rien ne s'y ecris. pourtant je passe toujours par les endrois où je devrais écrire ceci.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    J'ai écris un autre code pour voir si la fct r+ fonctionne
    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
     
    int main()
    {
            FILE* txtlectecr = NULL;
            txtlectecr = fopen("monopoly.txt", "r+");
            if (txtlectecr != NULL)
                {
     
     
                        fputs("note",txtlectecr);
                        printf("coucou");
     
                }
            else
            printf("coucoil!");
            }
    Ce code m'a permis en effet de voir que r+ fonctionne en remplacement.
    Mais le code si dessous ne fonctionne toujours pas alors que fputs("note",txtlectecr); et bien démarré à chaque fois que j'ai "if ((strcmp(ligne, " \n")==0))"
    Pourquoi donc il ne fonctionne pas???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            if (txtlectecr != NULL)
                {
                incrnote=0;
                while (fgets(ligne, MAX, txtlectecr) != NULL)
                {
     
                    if ((strcmp(ligne, "           \n")==0)){
                        fputs("note",txtlectecr);
                        printf("note=%d",incrnote);
                        incrnote= incrnote +1;
                    }
                }
                }

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Regarde ceci dans cette discussion

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Citation Envoyé par diogene Voir le message
    Regarde ceci dans cette discussion
    Tu veux parler de cette solution là:
    Citation Envoyé par diogene
    Si tu l'adoptes, tu devra faire usage de ftell() (pour obtenir la position courante dans le fichier), de fgets() (pour lire une ligne), de fseek() avec une position SEEK_SET et un offset de 0 ou d'une valeur obtenue par ftell() (pour repositionner le fichier) et de fputs() pour réécrire dans le fichier.
    J'ai du mal à comprendre tes explications...

    Sinon il me reste aussi la solution de faire un troisième fichier...
    Mais c'est très très moche...

    Pourrais tu me dire pourquoi ma solution ne fonctionne pas? Pourquoi RIEN ne se passe dans mon txt? J'ai cherché des réponses sur internet mais rien de rien.

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

Discussions similaires

  1. Erreur E/S 105 lors d'ecriture avec un fichier text
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 20/02/2009, 11h29
  2. Probleme d'ecriture avec JExcel
    Par LawSter dans le forum Documents
    Réponses: 1
    Dernier message: 31/05/2007, 16h51
  3. ecriture avec libpng
    Par trax44 dans le forum C
    Réponses: 1
    Dernier message: 12/03/2007, 21h03
  4. Ecriture avec FileStream
    Par Bob Groove dans le forum Windows Forms
    Réponses: 3
    Dernier message: 20/02/2007, 17h25
  5. [debutant] ecriture avec FileWriter
    Par newgeek91 dans le forum Langage
    Réponses: 1
    Dernier message: 09/11/2006, 23h19

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