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 :

probleme lecture et ecriture fichier texte [Non suivi]


Sujet :

C

  1. #1
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut probleme lecture et ecriture fichier texte
    bonjour a tous.
    J'ai un souci avec mes fonctions de lecture et ecriture.
    Commencons par le chargement:
    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
    21
    22
    23
    24
    25
    26
    void loadConfig(char *nom)
    {
    	FILE *fichier;
        int i=0;
    	char lettre;
     
    	printf("LOAD : %s\n", nom);
        fichier = fopen(nom,"r");
     
         // on va chercher le "="
        lettre=getc(fichier);
        while (lettre != '=')
            lettre = getc(fichier);
     
        // on chope le nombre de triangle
        fscanf(fichier, "%d", &compteurTriangle);
     
        //on avance d'un cran
        lettre =getc(fichier);  
     
        // pour chaque ligne
    	for (i=0 ; i<compteurTriangle ; i++)
    		fscanf(fichier, "%d %d %d", triangle[i][0], triangle[i][1], triangle[i][2]);
     
    	fclose(fichier);
    }
    Plantage au niveau de "getc" !!! J'avais deja eu cette erreur, mais je m'etais apercu que j'avais un mauvais nom de fichier. Or ici, tout est bon!! Encore plus surprenant, cette erreur survient apres le click sur un bouton (GLUI). Si je lance cette fonction au tout tout debut de mon main, j'ai un erreur sur le fscanf cette fois!


    deuxiemement: la sauvegarde!
    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
    void saveConfig(char *nom)
    {
        FILE *fichier;
        int i=0;
        printf("SAVE : %s \n",nom);
        fichier = fopen(nom,"w");
     
        // on ecrit le nombre de triangle
        fprintf(fichier, "# nombre de triangle = %d\n", compteurTriangle);
     
        // on ecrit la liste de chaque triangle
        for (i=0 ; i<compteurTriangle ; i++)
        {
            fprintf(fichier, "%d %d %d\n", triangle[i][0] , triangle[i][1], triangle[i][2]);   
        }
     
        fprintf(fichier, "\n\n");   
        fclose(fichier);
    Et la plantage au niveau de fprintf Et la encore, le pire, c'est que j'ai reussi a ecrire deux fichiers, et depuis, je sais pas ce que j'ai pu modifier, mais ca plante...

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    c'est pas plutôt fgetc que tu veux utiliser

  3. #3
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    humm c'est quoi la difference? En tout cas, je viens d'essayer avec fgetc, et c'est pas mieux...

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 723
    Points
    5 723
    Par défaut
    fgetc c'est pour lire dans un fichier et getc sur l'entrée standard(le clavier en général)

    Pour le reste de tes plantages il faut voir comment tu alloues tes triangles

  5. #5
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    si besoin, voila a quoi ressemble mon fichier que j'essaie de lire/creer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # nombre de triangle = 2
    4 13 5
    14 5 13

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    c'est pas plutôt fgetc que tu veux utiliser
    C'est pareil.

  7. #7
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    bon en tout cas, je deviens fou. Je vois vraiment pas ce qui cloche!

    Une précision qui a peut etre son importance, on ne sait jamais: je suis sous mac os X.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par shams
    si besoin, voila a quoi ressemble mon fichier que j'essaie de lire/creer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # nombre de triangle = 2
    4 13 5
    14 5 13
    Pour lire ça, c'est très simple, et c'est pas du tout ce que tu as écrit. Il faut lire ligne à ligne et traiter chaque ligne.
    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
     
       char ligne[128];
       int i = 0;
       while (fgets (ligne, sizeof ligne, fp) != NULL)
       {
           if (ligne[0] != '#')
           {
               if (sscanf (ligne,"%d %d %d" , &a_tri[i].a, &a_tri[i].b, &a_tri[i].c) == 3)
               {
                  i++;
               }
               else
              {
                  printf ("erreur de format\n");
                  break;
              }
           }
       }
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct tri
    {
       int a;
       int b;
       int c;
    };
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    struct tri a_tri[2];
    Si tu veux autre chose, il faut que tu précises d'une façon plus claire le format de ton fichier de données. (en principe, #, signifie 'commentaire', donc la ligne est ignorée).

  9. #9
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    ok merci pour ta reponse. je vais essayer avec fgets alors...
    Je savais pas pour le #. Mais du coup, comment je fais pour lire mon nombre de triangle?
    Autre question, pourquoi utiliser une structure? Je peux pas remplir mon tableau directement?

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par shams
    ok merci pour ta reponse. je vais essayer avec fgets alors...
    Je savais pas pour le #.
    Ce n'est qu'une convention. Tu définis ce que tu veux.
    Mais du coup, comment je fais pour lire mon nombre de triangle?
    chercher le '=' (strchr())
    convertir ce qu'il y a après (strtol())
    Autre question, pourquoi utiliser une structure? Je peux pas remplir mon tableau directement?
    Simple reflexe de ma part. Tu peux utiliser un tableau si tu préfères.

  11. #11
    Membre régulier Avatar de shams
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 210
    Points : 83
    Points
    83
    Par défaut
    bon je n'ai pas encore fait les modifs, mais j'ai toujours mon probleme pour ecrire le fichier par contre.
    voila ce que je fais pour appeler la fonction saveConfig:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcat(nomFichier, ".txt");	sprintf(tmp, "data/%s", nomFichier);	 saveConfig(tmp);
    ca me fait un bug sur le fprintf dans saveConfig.
    Maintenant si je fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcat(nomFichier, ".txt");	/*sprintf(tmp, "data/%s", nomFichier);	*/ saveConfig(nomFichier);
    ca me fait une erreur sur le readir de la fonction trouverFichier que je rappelle a la fin de saveConfig. Si je met cet appel en commentaire, ca passe, plus de plantage, par contre, mon fichier n'est ecrit nul part!!!!

    PS: voici la definition de mes entités. J'avais deja eu des erreurs a cause de ca, donc on sait jamais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char nomFichier[50];
    char string_list[100][50] ;
    les erreurs venaient quand j'avais mis sizeof(GLUI_string) a la place de 50

    EDIT: pour info, dans la pile du debugger, j'ai: saveConfig > fprintf > vfprintf_l > __vfprintf

Discussions similaires

  1. [VBA-E]Lecture ecriture fichier texte
    Par anisr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 13/04/2007, 05h46
  2. Probleme de lecture d'un fichier texte
    Par pracede2005 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 11/03/2007, 13h32
  3. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  4. Gros probleme de lecture d'un fichier texte
    Par Draekonyss dans le forum C
    Réponses: 12
    Dernier message: 25/04/2006, 09h25
  5. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22

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