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 :

enregistrement de structure dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut enregistrement de structure dans un fichier
    Bonjours à tous,
    je cherche à lire dans un fichier des informations sous la forme d'une structure

    struct Article {
    char ref[7];
    float Prix;
    int Quantite;

    cette structure représente une fiche d'un article

    j'ai enregistré les info saisie au clavier dans les champs de la structure, puis enregistré la structure dans le fichier grâce à la fonction:

    fwrite(&Fiche, sizeof(struct Article),1,fpFiche);

    ou fpFiche est mon pointeur fichier : [fpFiche=fopen(etc....)]
    et Fiche la varaible : struct Article Fiche;

    COMMENT FAIRE pour lire dans le fichier texte et afficher les différent champs de la structure sous la bonne forme (j'arrive a afficher et a lire mais le resultat est codée)

    fread(&NewFiche,sizeof(struct Article),1,fpFiche);

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Le problème en faisant ça, c'est que ton application ne sera pas portable. En effet, l'ordre des éléments dans la structure est gardé selon la norme C, mais pas la taille.

    Le compilateur peut effectuer un réalignement. Il peut ajouter des octets entre la fin et le début d'un champ pour par exemple, que le début du champs soit aligné avec le début d'un mot machine.

    Et donc, entre deux machines, la taille peut ne pas être pareil, et donc, ça ne pourra pas fonctionner.

  3. #3
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Difficile de t'aider avec aussi peu d'info.
    Montres nous le code qui te pose problème.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut
    c'est le code pour créer une fiche

    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
    70
    71
    72
    73
    74
    75
    76
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
     
    /*déclaration de structure*/
    struct Article {
           char ref[7];
           float Prix;
           int Quantite;
    };
     
    /*déclaration des fonction*/
     
    void AfficheFiche(struct Article Fiche);
     
    void SaisieFiche(struct Article *NewFiche);
     
    void SauveFiche(FILE *fpFiche,struct Article Fiche);
     
     
    int main(void){
     
        /*déclaration des variable*/
        struct Article Fiche;
        FILE *fpFiche;
     
     
        /*saisie d'une fiche*/
       SaisieFiche(&Fiche);
       /*affichage d'une fiche*/
       AfficheFiche(Fiche);
      /*enregistrement de la fiche dans le fichier Fiches.xla*/
      fpFiche=fopen("Fiches.xla","a");//ouverture du fichier en écriture à la fin du fichier
      if (fpFiche == NULL){
          perror("erreur d'ouverture du fichier");
          exit(0);
          }
      //fseek(fpFiche,0,SEEK_END);//positionnement du pointeur fichier au début du fichier
      SauveFiche(fpFiche,Fiche);
      fclose(fpFiche);
     
     
     
      system("PAUSE");	
      return EXIT_SUCCESS;
    }
     
     /*les fonctions*/
     
    void SaisieFiche(struct Article *NewFiche){
     
         printf("Saisie d'une nouvelle fiche \n");
         printf("Saisie de la reference : ");
         gets(NewFiche->ref);/*saisie d'une chaîne de caractère*/
     
         printf("saisie du prix : ");
         scanf("%g", &NewFiche->Prix);
        // fflush(stdin);
     
         printf("saisie d une quantite : ");
         scanf("%d", &NewFiche->Quantite);
        // fflush(stdin);
         }
     
    void AfficheFiche(struct Article Fiche){
         printf("affichage de la fiche \n");
         printf(" reference : %s \n",Fiche.ref);
         printf(" Prix: %f \n",Fiche.Prix);
         printf(" Quantité : %d \n",Fiche.Quantite);
         }
     
    void SauveFiche(FILE *fpFiche,struct Article Fiche){
     
         fwrite(&Fiche, sizeof(struct Article),1,fpFiche);
         }

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut
    et le code pour lire dans le fichier est le suivant

    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
    70
    71
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
     
     
    /*déclaration de structure*/
    struct Article {
           char ref[7];
           float Prix;
           int Quantite;
    };
     
    /*déclaration des fonction*/
     
    void AfficheFiche(struct Article Fiche);
    struct Article Remplissage(FILE *fpFiche,struct Article *NewFiche);
    /*programme principale*/
     
     
    int main(void)
    {
        /*déclaration des variables locales*/
        struct Article Fiche;
        FILE *fpFiche;
        int nbrFiche=0;
        int i=0;
     
    fpFiche=fopen("Fiches.xla","r");//ouverture du fichier en lecture seule 
    /*vérification de l'ouverture du fichier*/
      if (fpFiche == NULL){
          perror("erreur d'ouverture du fichier");
          exit(0);  
          }
     
    fseek(fpFiche,0,SEEK_SET);//positionnement du pointeur fichier au début du fichier
     
        do{
        Fiche=Remplissage(fpFiche,&Fiche);  
        printf("affichage de la fiche n %d \n",i+1);
        system("PAUSE");
        AfficheFiche(Fiche);    
        i++;
     
        }while (feof(fpFiche));
     
    nbrFiche=i; 
    printf("\n il y a %d fiche \n",nbrFiche);
    fclose(fpFiche);
     
     
      system("PAUSE");	
      return EXIT_SUCCESS;
    }
    /*fin de programme principale*/
     
     
    /*définition de fonction*/
     
    void AfficheFiche(struct Article Fiche){
     
         printf(" reference : %s \n",Fiche.ref);
         printf(" Prix: %f \n",Fiche.Prix);
         printf(" Quantite : %d \n",Fiche.Quantite);
         }
     
    struct Article Remplissage(FILE *fpFiche,struct Article *NewFiche){     
        fread(&NewFiche,sizeof(struct Article),1,fpFiche);
     
     
         }

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 16
    Par défaut
    mon probléme c que lors de l'affichage les info sont codé du style :
    reference : !?l^¨^^

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Par défaut
    Et pourquoi tu n'enregistre pas les valeurs de tes champs dans le fichier (en binaire ou en ascii)?
    Par exemple si tu as un fichier par fiches, tu mets sur chaque lignes la valeur d'un champ. Ensuite au chargement du fichier, tu lis ligne par ligne et tu remplis au fur et à mesure ta structure.

  8. #8
    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 florette
    je cherche à lire dans un fichier des informations sous la forme d'une structure

    struct Article {
    char ref[7];
    float Prix;
    int Quantite;

    cette structure représente une fiche d'un article
    http://emmanuel-delahaye.developpez....m#enreg_struct

Discussions similaires

  1. Enregistrement d'une structure dans un fichier
    Par Portus dans le forum C++
    Réponses: 21
    Dernier message: 30/08/2012, 11h02
  2. Enregistrer une structure dans un fichier txt
    Par SLF153 dans le forum MATLAB
    Réponses: 4
    Dernier message: 22/03/2011, 13h24
  3. enregistrer une structure dans un fichier
    Par Namson dans le forum C
    Réponses: 1
    Dernier message: 21/02/2009, 23h31
  4. Enregistrement structure dans un fichier
    Par clecle dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/04/2008, 15h26
  5. Problème de rangement de structure dans un fichier ...
    Par Freeze dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/12/2003, 16h46

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