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 :

stocker le contenu d'un fichier texte dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut stocker le contenu d'un fichier texte dans un tableau
    Bonsoir. J'ai un fichier texte que j'aimerai stocker dans un tableau de chaine de caractère.

    Le fichier texte est de la forme suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ligne 1
    ligne 2
    ligne 3
    ligne 4 
    ligne 5 
    ligne 6
    ligne 7
    Voici le code de mon programme. J'ai enlevé tout ce qui était controle d'erreur pour aller à l'essentiel. Je programme sous linux.
    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
    27
     
       #include<stdio.h>
       #include<stdlib.h>
    int main()
    {
     
         FILE * fp=fopen("fichier.txt","r");
         int i=0; // pour recuperer la taille du tableau
     
         char** tab=(char**)malloc(10000*sizeof(char*));
        char* chaine=(char*)malloc(BUFSIZ*sizeof(char));
       //tableau dans lequel je   stocke le fichier
       // je ne suis pas sur de moi. Je mets 10 000 parce que je ne sais pas trop   //quoi mettre comme valeur max.
     //Je ne sais pas non plus si déclarer un char** de cette façon est correcte.
        while( fgets(chaine,BUFSIZ,fp)
       {
          *tab=chaine;
           i++;
           tab++;
       }
     
     //affichage du tableau
     
     
     
     
    }
    Et à l'affichage du tableau je bloque. Comment faire revenir le pointeur au début pour que je puisse le parcourir ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Dans l'ordre:
    Probablement un pb dans la recopie:
    1/ Les includes devraient être situés en dehors du main
    2/ Il manque un '=' dans l'allocation de tab
    3/ Il manque une ')' à la fin du while.
    4/ Il manque les libérations
    Plus problématique:
    5/ *tab=chaine: Tu affectes toujours le même pointeur aux différentes entrées de ton tableau. Donc, toutes les entrées auront la même valeur, la dernière lue.
    6/Pour répondre à ta question,
    Comment faire revenir le pointeur au début pour que je puisse le parcourir ?
    Ne modifie pas le pointeur tab que tu as alloué, utilise un autre pointeur pour faire ton parcours.

  3. #3
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    1),2),3),4) sont bien des erreurs de recopie je corrige.


    Pour 5) je ne comprend pas trop. Vu que je lit le fichier avec fgets, la valeur de chaine change à chaque ligne lue non ?
    Puis si je fais un affichage de controle dans ma boucle sur chaine ce sont bien des lignes différentes qui s'affichent.

    Pour 6) exact je crorrige

    bon j'ai fait des modif. Voici mon nouveau 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
      #include<stdio.h>
       #include<stdlib.h>
    int main()
    {
     
         FILE * fp=fopen("fichier.txt","r");
         int tailleTab=0; // pour recuperer la taille du tableau
     
         char** tab=(char**)malloc(10000*sizeof(char*));
        char* chaine=(char*)malloc(BUFSIZ*sizeof(char));
        char* res=(char*)malloc((BUFSIZ)*sizeof(char));
        char** temp=tab;
       //tableau dans lequel je   stocke le fichier
       // je ne suis pas sur de moi. Je mets 10 000 parce que je ne sais pas trop   //quoi mettre comme valeur max.
     //Je ne sais pas non plus si déclarer un char** de cette façon est correcte.
        while( res=fgets(chaine,BUFSIZ,fp)
       {
          *temp=res;
           tailleTab++;
           temp++;
       }
     
     //affichage du tableau
     
      while(j<=tailleTab)
      {
           printf("%s",*tab);
          tab++;
          j++;
     
      }
     
    return 0
    }//fin main
    Même probleme en faite. QUand j'affiche le tableau je n'affiche que la derniere ligne du fichier

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    1. Tu ne devrais jamais modifier tab: Utilise directement tab[j]
    2. Tu n'alloues qu'une seule chaîne, donc tu ne peux avoir qu'une seule ligne... Tu écrases toujours la chaîne.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2005
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 251
    Par défaut
    Je ne comprend pas tres bien cette histoire d'allocation d'une seule chaine. Tu peux developper par l'exemple ? :s


    Parce que quand je fais :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
      #include<stdio.h>
       #include<stdlib.h>
    int main()
    {
     
         FILE * fp=fopen("fichier.txt","r");
         int tailleTab=0; // pour recuperer la taille du tableau
        int j=0;
         char** tab=(char**)malloc(10000*sizeof(char*));
        char* chaine=(char*)malloc(BUFSIZ*sizeof(char));
        char* res=(char*)malloc((BUFSIZ)*sizeof(char));
        char** temp=tab;
       //tableau dans lequel je   stocke le fichier
       // je ne suis pas sur de moi. Je mets 10 000 parce que je ne sais pas trop   //quoi mettre comme valeur max.
     //Je ne sais pas non plus si déclarer un char** de cette façon est correcte.
        while( res=fgets(chaine,BUFSIZ,fp))
       {
           printf("%s",chaine);
          temp[j]=chaine;
          j++;
       }
     
     //affichage du tableau
     tailleTab=j++;
     j=0;
      while(j<=tailleTab)
      {
           printf("%s",tab[j]);
     
          j++;
     
      }
     
    return 0
    }//fin main
    La partie affichage du tableau me renvoie toujours que la derniere ligne du tableau repeter 7 fois.

    Mais le printf("%s"',chaine) que j'ai rajouté dans le premier while m'affiche bien toutes les lignes de mon fichier.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Tu alloues la place pour dix mille pointeurs, mais tu as seulement alloué deux tableaux de char...
    En clair, tes dix mille pointeurs ne pointent sur rien du tout au début, puis, tous ceux que tu affectes, tu les fais pointer sur le même tableau de char...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par sneb5757 Voir le message
    La partie affichage du tableau me renvoie toujours que la derniere ligne du tableau repeter 7 fois.

    Mais le printf("%s"',chaine) que j'ai rajouté dans le premier while m'affiche bien toutes les lignes de mon fichier.
    C'était le sens de ma remarque 5 et de la précision de Medinoc.


    En fait, puisque tu fais un tableau de pointeur, chaque entrée de ton tableau devrait être alloué. Et c'est avec cette entrée que tu lis les données de ton fichier.

Discussions similaires

  1. contenu d'un fichier texte dans un tableau
    Par lyoram dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/11/2006, 11h15
  2. Réponses: 4
    Dernier message: 15/08/2006, 17h40
  3. Réponses: 8
    Dernier message: 06/08/2006, 15h11
  4. Réponses: 3
    Dernier message: 19/05/2006, 11h35
  5. [Tableaux] Stocker un fichier texte dans un tableau
    Par clairette59 dans le forum Langage
    Réponses: 13
    Dernier message: 27/01/2006, 23h48

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