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 :

Encodage info dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut Encodage info dans un fichier
    Bonjour à tous,

    J'aimerais pour encoder des fiches avec des employés qui seront sauvegardés dans un fichier
    pour les afficher plus tard.

    Je penses qu'il a un problème dans mon code

    La clé primaire qui permet de différencier les employés est un numero de registre


    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
     
    void ajouteremployer( int maxi)
    {
        int verif=0;
     
        /*a) Vérification s'il y a de la place*/
     
        verif=verificationplace(maxi);
     
        if(verif != 0)
        {
            ajoutemployer(maxi, verif);
        }
        else
        {
            printf("Erreur le fichier est plein\n");
        }
     
        // Retour menu principal
    }
    ----------------------------------------------------------------------------------------------------------
    void ajoutemployer(int maxi,int destination)
    {
        struct employer fiche ={0,"Zz","Zz","Zz",0,0,"Zz", "Zz",{0,0,0},{0,0,0}};
        struct employer *pemployer=&fiche;
        FILE *fp;
        int verif=0;
     
        fp=fopen("fiche.dat","r+b");
        if(fp != 0)
        {
            // Encodage de la fiche
     
            /*place le pointeur d'écriture au bon endroit*/
     
            fseek(fp,sizeof(struct employer)*destination,SEEK_SET);
     
            /*écrit dans le fichier*/
     
            fwrite(pemployer,sizeof(struct employer),1,fp);
     
            fclose(fp);
        }
        else
        {
            printf("Ouverture du fichier echoue");
        }
    }

    Merci d'avance pour vos commentaires

  2. #2
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 329
    Par défaut
    Tu utilises un pointeur sur une structure que tu appelles "pemployer" mais tu écrits sur le fichier le contenu de "pouvrier"...

    Je pourrais te conseiller de passer la structure à écrire comme paramètre de la fonction "ajouteremployer()" ...

    Le prototype de la fonction serait:

    void ajouteremployer(int,int,employer*);

    Fais attention, je ne sais pas quelles conséquences cela pourrait avoir mais le prototype de fwrite() est fwrite(const void *restrict ptr, size_t size, size_t nitems,FILE *restrict stream);

    Je te conseillerais d'appeler fwrite() comme ceci: fwrite((void*)pemployer,sizeof(struct employer),1,fp);

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par P.Snow Voir le message
    Bonjour à tous,

    J'aimerais pour encoder des fiches avec des employés qui seront sauvegardés dans un fichier
    pour les afficher plus tard.

    Je penses qu'il a un problème dans mon code

    La clé primaire qui permet de différencier les employés est un numero de registre


    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
    void ajoutemployer(int maxi,int destination)
    {
        struct employer fiche ={0,"Zz","Zz","Zz",0,0,"Zz", "Zz",{0,0,0},{0,0,0}};
        struct employer *pemployer=&fiche;
        FILE *fp;
        int verif=0;
     
        fp=fopen("fiche.dat","r+b");
        if(fp != 0)
        {
            // Encodage de la fiche
     
            /*place le pointeur d'écriture au bon endroit*/
     
            fseek(fp,sizeof(struct employer)*destination,SEEK_SET);
     
            /*écrit dans le fichier*/
     
            fwrite(pemployer,sizeof(struct employer),1,fp);
     
            fclose(fp);
        }
        else
        {
            printf("Ouverture du fichier echoue");
        }
    }
    Bonjour

    Ni la variable "maxi" (qui est en plus reçue comme paramètre) ni "verif" ne sont utilisées dans ta fonction. Et le pointeur "pemploye" ne sert pas non plus à grand chose.

    Citation Envoyé par hurukan Voir le message
    Tu utilises un pointeur sur une structure que tu appelles "pemployer" mais tu écrits sur le fichier le contenu de "pouvrier"...
    Euh je n'ai rien vu qui ressemble à ça...

    Citation Envoyé par hurukan Voir le message
    Je pourrais te conseiller de passer la structure à écrire comme paramètre de la fonction "ajouteremployer()" ...
    C'est en effet une bonne idée.

    Citation Envoyé par hurukan Voir le message
    Fais attention, je ne sais pas quelles conséquences cela pourrait avoir mais le prototype de fwrite() est fwrite(const void *restrict ptr, size_t size, size_t nitems,FILE *restrict stream);

    Je te conseillerais d'appeler fwrite() comme ceci: fwrite((void*)pemployer,sizeof(struct employer),1,fp);
    Pas la peine. (void*)ptr signifie que "ptr" est un pointeur universel donc il peut stocker n'importe quelle adresse. C'est d'ailleurs pour ça que fwrite() a besoin de connaitre la taille d'un élément (en octets). Parce que la fonction se contente de bazarder les octets en vrac à partir de "ptr" sur le fichier sans se soucier de ce qu'ils représentent.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut
    tout d'abord merci pour vos réponses

    Le pointeur pemployer est utilisé pour "la partie encodage" essentiellement
    que je n'ai pas détaillé car cette partie ne pose pas de problème


    Si je modifie mon prototype cela donne qq chose comme ca : void ajouteremployer(struct employer);
    le passage en paramètre de ma structure dans la fct ou par la suite j'encoderais mes fiches
    signifie que je n'ai plus besoin de la déclarer dans la fonction ?

    Edit
    lorsque je passe en paramètre ma structure
    J'ai ce message d'erreur
    Pas aassez d'arguments pour un appel
    Erreur de syntaxe
    liste de paramètre formels attendue,non une liste des types
    Quelqu'un pourrait m'expliquer ces message d'erreurs?

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Ben vue d'ici (parce que vu les infos que tu donnes sur ta fonction et ta façon de l'appeler on voit que dalle) il semblerait que tu l'appelles en ne lui passant pas les bons arguments...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2014
    Messages : 11
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben vue d'ici (parce que vu les infos que tu donnes sur ta fonction et ta façon de l'appeler on voit que dalle) il semblerait que tu l'appelles en ne lui passant pas les bons arguments...
    Pour écrie alors le plus simplement dans un fichier en utilisant une fonction que dois-je faire ?

Discussions similaires

  1. Comment aller chercher une info dans un fichier
    Par El-Diablo- dans le forum C++Builder
    Réponses: 15
    Dernier message: 06/05/2007, 16h39
  2. renvoi d'infos dans un fichier
    Par soria_t dans le forum C
    Réponses: 4
    Dernier message: 23/02/2007, 12h24
  3. [Debutant] stockage d'infos dans un fichier texte
    Par Cheeper dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/01/2007, 11h02
  4. Réponses: 4
    Dernier message: 08/04/2006, 09h10
  5. [langage] [PERL] prendre des infos dans un fichier log
    Par osiris73 dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2005, 16h42

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