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 :

gestion de fichier / inisialisation tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut gestion de fichier / inisialisation tableaux
    Bonjour,

    J'ai un fichier dont l'organisation des données est ci dessous et à partir de ce fichier je dois intialiser des tableaux comme suit:
    de nom_cours1 jusaqua $ seront mis dans tableau de type char , matricule1 à N dans un tableau de type int ,nom1 à N dans un tableau char, prenom1 à N dans autre tableau char, nb_cours1 à N dans autre tableau int ,nom_cours1 à N dans un tableau char ,note_cours1 à N dans un autre tableau int. en tout j'ai 7 tableaux à intialiser,j'ai essaye avec fsacnf et fgets mais j c pas comment les utiliser et le problem c que comment je peux parcours le fichier jusaqu le $. et le gros problem commence à partir de matricule1 nom1 prenom1 nb_cours1 puissaque cette ligne contient 4 variables dont chacune va etre mise dans tableau apart et comment atteindre la 2ème ligne matricule2 nom2 prenom2 nb_cours2 apres avoir mis nom_cours1 note_cours1 à N chacune dans tableau apart aussi.

    Merci et bonne journée,
    ***********************************
    nom_cours1
    nom_cours2

    nom_coursN
    $
    matricule1 nom1 prenom1 nb_cours1
    nom_cours1 note_cours1
    nom_cours2 note_cours2

    nom_coursN note_coursN
    matricule2 nom2 prenom2 nb_cours2
    nom_cours1 note_cours1
    nom_cours2 note_cours2

    nom_coursN noteCoursN

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par makrm Voir le message
    <...>en tout j'ai 7 tableaux à intialiser,j'ai essaye avec fsacnf et fgets mais j c pas comment les utiliser <...>
    Tu as oublié de poster le code avec lequel tu as un problème. Ici, on ne fait pas le travail des autres...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Tu as oublié de poster le code avec lequel tu as un problème. Ici, on ne fait pas le travail des autres...
    Bonjour

    Moi je demande pas aux autres de faire mon travail, moi j fait mon travail c un programme de gestion de donnees j'ai fait tout, la seul chose que j pas pu faire c d intisilaliser les tableau a partir de fichier moi si j savais la reponse je pose pas de question.
    *********
    les tableaux et la fonction:
    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
    	int matricules[max_etudiants
    	char noms[max_etudiants][taille_chaine+1]
    	char prenoms[max_etudiants][taille_chaine + 1
    	char * cours[max_etudiants][max_cours];//le tableau de pointeurs d’un étudiant, chaque pointeur pointant sur le nom du cours auquel l’étudiant est inscrit
    	float notes[max_etudiants][max_cours				int nbCours[max_etudiants; //le nombre de cours auquel chaque étudiant est inscrit
    	char nomsCours[nb_cours_offerts][taille_chaine + 1]
     
     
    void chargementDonnees(int matricules[max_etudiants], char noms[max_etudiants][taille_chaine+1], char prenoms[max_etudiants][taille_chaine + 1],char nomsCours [nb_cours_offerts][taille_chaine + 1],char * cours[max_etudiants][max_cours],float  notes[max_etudiants][max_cours],int nbCours[max_etudiants],  int *code_err))
    {
     
    	int i=0;
     
    	FILE *fichier;
     
    	fichier=fopen(nomFichier, "rt");
     
    	*code_err=erreur;
     
    	if(fichier==NULL)
    	{
    		printf("Erreur d'ouverture de Fichier\n");
    		exit(1);
    	}
     
    		/*** j essayer ici avec fscanf s a pas marche****/
     
    *code_err=ok;
    }

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par makrm Voir le message
    les tableaux et la fonction:
    Ce code est incomplet et n'a aucune chance de compiler. Ceci compile :
    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
     
    #include <stdio.h>
     
    enum
    {
       ok, erreur,
       max_etudiants = 10,
       taille_chaine = 32,
       nb_cours_offerts = 16,
       max_cours = 32,
       dummy
    };
     
    static char const nomFichier[] = "data.txt";
     
    void chargementDonnees (int matricules[max_etudiants],
                            char noms[max_etudiants][taille_chaine + 1],
                            char prenoms[max_etudiants][taille_chaine + 1],
                            char nomsCours[nb_cours_offerts][taille_chaine + 1],
                            char *cours[max_etudiants][max_cours],
                            float notes[max_etudiants][max_cours],
                            int nbCours[max_etudiants], int *code_err)
    {
     
       int i = 0;
     
       FILE *fichier = fopen (nomFichier, "rt");
     
       *code_err = erreur;
     
       if (fichier == NULL)
       {
          printf ("Erreur d'ouverture de Fichier\n");
          exit (1);
       }
     
      /*** j essayer ici avec fscanf s a pas marche****/
     
       *code_err = ok;
    }
     
    int main (void)
    {
       int matricules[max_etudiants];
       char noms[max_etudiants][taille_chaine + 1];
       char prenoms[max_etudiants][taille_chaine + 1];
       char *cours[max_etudiants][max_cours]; //le tableau de pointeurs d’un étudiant, chaque pointeur pointant sur le nom du cours auquel l’étudiant est inscrit
       float notes[max_etudiants][max_cours];
       int nbCours[max_etudiants];  //le nombre de cours auquel chaque étudiant est inscrit
       char nomsCours[nb_cours_offerts][taille_chaine + 1];
       int code_err;
       chargementDonnees (matricules, noms, prenoms, nomsCours, cours, notes,
                          nbCours, &code_err);
       return 0;
    }
    • Il est d'usage, d'utiliser les majuscules pour les expression constantes.
    • As-tu étudié les structures ? A l'évidence, tes données sont en vrac, alors qu'elles devraient être regroupées en structures cohérentes... Tu n'as pas fait d'analyse ? Admettons que l'objet de l'exercice est de faire découvrir l'utilité des structures...
    • Pour lire une ligne de texte, on utilise fgets(). Après nettoyage (voir clean() ou fclean(), une fonction 'communautaire' dont le code a été publié ici de nombreuses fois). Ensuite, on analyse la ligne soit automatiquement avec sscanf(), si le format est bien défini, soit à la main selon un algorithme à définir en fonction du format des données.
    • L'ouverture de fichier peut échouer (NULL). A tester avant d'utiliser une fonction de fichier.
      EDIT : OK, c'est fait "à-la-hache" (exit()...)
    • Tout fichier correctement ouvert doit être refermé après utilisation.

    Fait de ton mieux et poste ton code si tu as un problème.

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Pour simplifier le prototype de ta fonction chargementDonnees() et aussi pour te simplifier la vie, je te propose de regrouper les informations destinées à représenter un étudiant dans une structure:

    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
    #define TAILLE_CHAINE 32
    #define MAX_COURS 5
    #define MAX_ETUDIANTS 10
    #define NB_COURS_OFFERTS 10
     
    enum Erreurs {
        CHARGEMENT_OK,
        CHARGEMENT_ERR_ARG_INVALIDE,
        CHARGEMENT_ERR_OUVERTURE,
        CHARGEMENT_ERR_NB
    };
     
    struct Etudiant
    {
        int matricule;
        char nom[TAILLE_CHAINE + 1];
        char prenom[TAILLE_CHAINE + 1];
        int nbCours;
        int cours_id[MAX_COURS]; /* -tc- indice dans le tableau des cours */
        float notes[MAX_COURS];
    };
     
    int chargement_donnees(struct Etudiant *etudiants, size_t n_etudiants,
            char *cours[TAILLE_CHAINE + 1], size_t n_cours)
    {
        int err = CHARGEMENT_OK;
     
        if (etudiants != NULL && n_etudients > 0 && cours != NULL && n_cours > 0)
        {
            FILE *fp = NULL;
     
            fp = fopen("fichier_donnees.txt", "r");
            if (fp != NULL)
            {
                /* -tc- lire de fichier et placer les donnees dans le tableau
                   etudients ou dans le tableau cours */
            }
            else
            {
                /* -tc- Erreur: impossible d'ouvrir le fichier */
                err = CHARGEMENT_ERR_OUVERTURE;
            }
        }
        else
        {
            /* -tc- Erreur: argument invalide */
            err = CHARGEMENT_ERR_ARG_INVALIDE;
        }
     
        return err;
    }
     
    int main(void)
    {
        int err = CHARGEMENT_OK;
        struct Etudiant etudiants[MAX_ETUDIANTS] = {0};
        char noms_cours[NB_COURS_OFFERTS][TAILLE_CHAINE + 1] = {
            /* -tc- Initialisation avec le noms des cours disponibles */
        };
     
        err = chargement_donnees(etudiants, MAX_ETUDIANTS, noms_cours, NB_COURS_OFFERTS);
     
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. Gestion de fichier
    Par Zenol dans le forum C++
    Réponses: 6
    Dernier message: 22/09/2005, 15h44
  2. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h52
  3. Fonctions de gestion de fichiers
    Par sebduth dans le forum Fortran
    Réponses: 4
    Dernier message: 22/08/2005, 10h38
  4. [JDOM] Gestion "gros fichiers"
    Par Haazheel dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 17/10/2003, 13h42
  5. [Concept] BD ou Gestion par fichier. Intérêt de la BD ?
    Par Cian dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/11/2002, 12h16

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