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 :

Charger un fichier dans un tableau de structures


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut Charger un fichier dans un tableau de structures
    Bonjour,

    Je suis vraiment debutant en C et j'ai un petit pb. J'espere bien que vous pouvez me donnez la solution car j'ai perd beaucoup de temps mais rien est obtenu.

    Donc je possede un fichier dont le contenu est comme suit et je veux le charger dans un tableau de structures:
    1
    classe1 tm1min tm1moy tm1max
    etudiant11
    etudiant12
    ...

    2
    classe2 tm2min tm2moy tm2max
    etudiant21
    etudiant22
    etudiant23
    ...

    3
    classe3 tm3min tm3moy tm3max
    etudiant31
    etudiant32
    etudiant33
    ...
    ...
    Je veux charger ce fichier dans un tableau de structure dont la structure principale est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
        char numclasse[3];
        char classe[20];
        char tempsmin[5],tempsmoy[5],tempsmax[5];
        char tabetudiant[][];
    }mastruct;
    S'il vous plais si qq'un pourra m'aider je serai treeeeeeeeeees reconnaissante. car vraiment je n'ai obtenu aucune solution.
    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    il te faut utiliser :

    • fopen
    • fgets
    • sscanf
    • strcpy
    • plus éventuellement strtok



  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Dans un premier temps définis la structure comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
        int numclasse;
        char classe[20];
        char tempsmin[5],tempsmoy[5],tempsmax[5];
        char tabetudiant[MAX_ETUDIANTS][MAX_NOM_ETUDIANT]; /* Regarde par ici */
    }mastruct;
    Il faut évidemment définir les symboles MAX_ETUDIANTS et MAX_NOM_ETUDIANT. Si tu n'arrives pas à t'en sortir avec ça, c'est pas avec un tableau dynamique que tu auras plus de chances.

    Tutoriel sur la manipulation des fichiers, c'est ici + ici.

  4. #4
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Merci beaucoup pour vous,

    En fait j'ai pu faire ce petit code, mais il m'a permit seulement de récupérer la première chaine et je ne sais pas comment je peux terminer:
    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
     
    char inter[20];
    int i=0,j=0;
    void charge (struct mastruct tabclasse[100])
    { 
       FILE *fic;
       fic=fopen("classe.txt","rt");
       while(!feof(fic))
       {
          c=(char)getc(fic);
          if(c!=" ")||(c!="\n")
          {
            inter[i]=c;
            i++;
          }
          else
          {
            tabclasse[j].num=c;
          }
        }
    }
    Comment donc je peux recuperer les autres champs de mon tableau de structure.

    Merci encore.

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Est ce qui il y a une fonction qui peut me récupérer tout une chaine de caractère c'est à dire ente deux espaces est celui d'une ligne.

    Merci encore.

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Ce n'est pas de cette façon qu'on parcourt un fichier, et ne confonds pas caractère (exemple : ' ', '\n') et chaîne de caractères (exemple : "abc", "a", " ", "\n"). Pour lire un ligne entière on utilise fgets. Tout ça c'est expliqué dans les liens que je t'ai donnés.

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Février 2009
    Messages
    220
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2009
    Messages : 220
    Par défaut
    Bonjour
    Voila le code que j'ai pu le faire, après la consultation des sites que vous avez me donné, mais je suis encore bloqué. Merci bien si vous pouvez m'aider .
    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
    69
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct mastruct
    {
        int numc;
        char nomclasse[15];
        char tempsmin[5],tempsmoy[5],tempsmax[5];
        char tabetudiants[100][15];
    }mastruct;
     
    void main()
    {
        struct mastruct tabclasse[100];
        char inter[15]="";
        char ligne[1024];
        char c;
        int i=-1;
        FILE *fia;//Pointeur fichier classes.txt
        fia=fopen("classes.txt","rt");
        while(!feof(fia))
        {
            fgets(ligne,1024,fia);
            if(ligne!="$")
            {
                i++;
                while(c=(char)fgetc(fia)!=" ")
                {
                    strcat(inter,c);
                }
                tabclasse[i].numc=inter;
                inter="";
     
                while(c=(char)fgetc(fia)!=" ")
                {
                    strcat(inter,c);
                }
                tabclasse[i].nomclasse=inter;
                inter="";
     
                while(c=(char)fgetc(fia)!=" ")
                {
                    strcat(inter,c);
                }
                tabclasse[i].tempsmin=inter;
                inter="";
     
                while(c=(char)fgetc(fia)!=" ")
                {
                    inter=strcat(inter,c);
                }
                tabclasse[i].tempsmoy=inter;
                inter="";
     
                while(c=(char)fgetc(fia)!=" ")
                {
                    strcat(inter,c);
                }
                tabclasse[i].tempsmax=inter;
            }
            else
            {
                tabclasse[i].tabetudiants[k]=ligne;
                k++;
            }
        }
        fclose(fia);
    }
    NB: J'ai ajouter dans le fichiers le "$" lorsque la ligne concerne un étudiant.

    Merci encore.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    Bref, tu as du travail à revoir les bases du langage...

Discussions similaires

  1. charger un fichier dans un tableau
    Par siempre dans le forum C
    Réponses: 12
    Dernier message: 20/11/2009, 09h15
  2. Réponses: 3
    Dernier message: 12/11/2009, 14h26
  3. Charger un fichier dans tableau d'entier
    Par nico0007 dans le forum Langage
    Réponses: 12
    Dernier message: 17/04/2008, 11h30
  4. Réponses: 32
    Dernier message: 11/03/2007, 11h25
  5. charger un fichier dans un tableau
    Par nico0007 dans le forum Delphi
    Réponses: 3
    Dernier message: 16/01/2007, 23h59

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