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 :

Remplir un tableau à partir d'un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut Remplir un tableau à partir d'un fichier
    Bonjour,
    J'ai un fichier qui contient
    >>
    //commentaire
    abba*
    a b c e
    9 2 << taille du tableau
    2 2
    2 1
    1 2
    2 2
    2 3
    4 5
    5 1
    4 7
    8 6
    1 3 4
    <<

    La 4ème ligne représente la taille du tableau
    Le reste des lignes du ligne n°5 jusqu'à ligne n°13 sont
    les valeurs à remplir dans le tableau

    Je veux lire ces entiers et les mettre dans le tableau,
    mais j'ai pas arriver et surtout mettre les bonnes boucles
    convenablement pour cette opération?
    Je ne sais pas pourquoi la première valeur est valide mais les autres
    sont comme des emplaements en mémoire!


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
     
        FILE *fichier = NULL;
        fichier = fopen("d:\\a.txt", "r");
        if (fichier != NULL)
        {
       	char ligne[32];
     
            int nb_line_tab,
            nb_col_tab,nb_line_fichier = 0,
            **tab_t;
     
            while(nb_line_fichier<4)
            {
                nb_line_fichier++;
     
                fgets (ligne, sizeof ligne, fichier);
     
            }
     
            nb_line_tab=ligne[0] - '0';
            nb_col_tab=ligne[2] - '0';
            int j;
     
            //  allocation dynamique de tab_t
            int tab[10];
            tab_t = malloc(nb_line_tab* sizeof(int*));
             for(j=0;j<nb_line_tab;j++)
                 tab_t[j]=malloc(nb_col_tab * sizeof(int));
                    printf("\nallocation tab des trans");
            //fin allocation
            printf("\ndimension de tab des trans [%d][%d] ", nb_line_tab,nb_col_tab);
     
     
     
     
     
        //operation  change v2.3
                puts("");int cpt,entier;
     
                    cpt=0; int cpt2;
               for(cpt2=0;cpt2<nb_line_tab;cpt2++)
               {
                while(cpt<nb_col_tab )
                {
                    fscanf(fichier, "%d ",&entier);
                    tab_t[cpt][cpt2]=entier;cpt++;
                }
     
                fseek(fichier, -1, SEEK_CUR);
     
     
                for (cpt=0; cpt<nb_col_tab;cpt++)
                     for(cpt2=0;cpt2<nb_line_tab;cpt2++)
                    printf("%d\n",tab_t[cpt][cpt2]);
     
               }
     
     
     
            fclose(fichier);
        }
        return 0;
    }

    S'il vous plaît vous pouvez m'aidez corriger ce code,
    ou vous pouvez me renseigner sur une autre solution.
    Merci d'avance.
    Cordialement,
    alibm

  2. #2
    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
    Quelques remarques au fil de la lecture du code :
    *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nb_line_tab,
    nb_col_tab,nb_line_fichier = 0,
    **tab_t;
    est peu lisible. Si tu tiens à mettre plusieurs variables sur la même ligne, au moins rappelle le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int nb_line_tab;
    int nb_col_tab,nb_line_fichier = 0;
    int **tab_t;
    **
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nb_line_tab=ligne[0] - '0';
    nb_col_tab=ligne[2] - '0';
    Procède plutôt avec sscanf(), ce qui permettra d'avoir des valeurs >9 avec un format plus souple et éventuellement de tester la validité du format du fichier en testant la valeur de retour du sscanf().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(ligne,"%d%d",&nb_line_tab, &nb_col_tab);
    ***
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab_t = malloc(nb_line_tab* sizeof(int*));
    for(j=0;j<nb_line_tab;j++)
        tab_t[j]=malloc(nb_col_tab * sizeof(int));
    Normalement, tu devrais t'assurer que nb_line_tab et nb_col_tab sont stictement supérieurs à 0 et surtout que l'allocation a réussi : tab_t != NULL puis tous les tab_t[j] != NULL

    ****
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    cpt=0; int cpt2;
    for(cpt2=0;cpt2<nb_line_tab;cpt2++)
    {
      while(cpt<nb_col_tab ) // la valeur de cpt est incorrecte après la premiere boucle
      {
      }
    ....
      fseek(fichier, -1, SEEK_CUR); // utilisation incorrecte de fseek() pour un fichier texte.
      for (cpt=0; cpt<nb_col_tab;cpt++)  
          for(cpt2=0;cpt2<nb_line_tab;cpt2++) // la valeur de cpt2 est détruite !!!
          ....
    }
    Commentaires dans le code.
    On attend quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(cpt2=0;cpt2<nb_line_tab;cpt2++)
      for (cpt=0; cpt<nb_col_tab;cpt++)
         scanf("%d", tab_t[cpt2]+cpt); 
     
    for(cpt2=0;cpt2<nb_line_tab;cpt2++)
      for (cpt=0; cpt<nb_col_tab;cpt++)
         printf("%d\n",tab_t[cpt2][cpt]);

Discussions similaires

  1. Remplir plusieurs tableaux à partir d'un fichier XML
    Par MarsVolta dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2016, 20h52
  2. Korn shell: remplir un tableau à partir de fichier texte
    Par julie26000 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 18/01/2014, 13h24
  3. [TP] Remplir un tableau à partir des données d'un autre tableau
    Par The future scientist dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 27/05/2007, 17h31
  4. Comment remplir un xml à partir d'un fichier texte
    Par edophie dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2006, 23h05
  5. comment remplir un jTable à partir d'un fichier texte
    Par @yoyo dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 11h54

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