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 :

Modification dans des fichiers (fseek)


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut Modification dans des fichiers (fseek)
    Bonjour à tous,

    Je dois faire un exercice avec des structures et fichier. J'ai fais l'ajout, la recherche et l'affichage. Mais la modification je coince.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Modif(struct Donnees *pNew,FILE*fp)
    {
        int nb;
        nb=Rech(pNew); // l'emplacement du nom recherché
        if(nb!=0)
            fp= fopen (chemin, "w+b"); //ouverture du fichier en écriture
        fseek(fp, nb*sizeof(pNew),SEEK_SET); 
        LireDonnee(pNew,fp); // Ajout des données de ma structure
        fclose(fp);
    }
    Mon programme si besoin 8.2.c

    Merci d'avance

    Kallidus

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Tu mélanges trop de tâches dans ton code: Tu devrais séparer la saisie des données sur l'entrée standard et l'écriture du fichier.
    De plus:
    • fflush(stdin) est une erreur. fflush() n'est défini que pour les flux sortants. Ce n'est pas comme ça qu'on nettoie le buffer clavier.
    • Pourquoi faire les saisies à coup de getchar() plutôt que fgets()?
    • Ne passe pas en paramètre de fonction des variables dont la valeur n'est pas utilisée par la fonction (ta fonction Modif() n'a pas besoin de fp en paramètre, mais en variable locale)
    • Tes boucles de saisie de chaîne et de retour si erreur, tu peux en faire une fonction: Passe-lui juste les messages d'erreur et la limite de taille en paramètres.

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    J'ajoute que tu ne vérifies la valeur de retour d'aucun de tes appels système. Comment espères-tu de cette manière découvrir l'origine des erreurs à l'exécution ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Merci de vos réponses @Médinoc et @Matt_Houston.

    Citation Envoyé par Médinoc Voir le message
    Tu mélanges trop de tâches dans ton code: Tu devrais séparer la saisie des données sur l'entrée standard et l'écriture du fichier.
    De plus:
    Tu dis que je dois faire une fonction de mon menu dans le main?

    Citation Envoyé par Médinoc Voir le message
    Pourquoi faire les saisies à coup de getchar() plutôt que fgets()?
    C'est le prof qui l'a demandé.

    Citation Envoyé par Médinoc Voir le message
    Ne passe pas en paramètre de fonction des variables dont la valeur n'est pas utilisée par la fonction (ta fonction Modif() n'a pas besoin de fp en paramètre, mais en variable locale)
    Tes boucles de saisie de chaîne et de retour si erreur, tu peux en faire une fonction: Passe-lui juste les messages d'erreur et la limite de taille en paramètres.
    Ok merci du conseil.

    Citation Envoyé par Matt_Houston Voir le message
    J'ajoute que tu ne vérifies la valeur de retour d'aucun de tes appels système. Comment espères-tu de cette manière découvrir l'origine des erreurs à l'exécution ?
    Vérifier la valeur de retour??

    Bien à vous

    Kallidus

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Citation Envoyé par Kallidus Voir le message
    Vérifier la valeur de retour??
    Okay...

    Les fonctions qui sollicitent des ressources du systèmes peuvent échouer : que se passera-t-il si tu tentes d'accéder à un fichier qui n'existe pas ? Afin de déterminer la manière dont a été effectuée l'opération demandée ou si une erreur s'est produite, ces fonctions disposent d'un mécanisme pour informer l'appelant du résultat. Le plus souvent ce mécanisme prend la forme d'un code transmis par la valeur de retour de la fonction. Je t'invite à consulter les pages de manuel des appels que tu utilises.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Bonjour,

    Sur le site, y aurait-il un tutoriel ou des explications sur les fichiers en C?

    Car là, je patauge.

    Kallidus

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 724
    Points
    219 724
    Billets dans le blog
    125
    Par défaut
    Bien sûr, il y a des tutoriels, et la FAQ aussi.

    Et bien sûr, un tutoriel sur les fichiers

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Ok merci

    Mais je n'ai pas trouvé mon bonheur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File *fp;
    fp = fopen ("donnees.dat", "lettre");
    Quelqu'un sait quel lettre faut mettre dans ce code entre a,a+,w,w+ pour permettre d'ajouter des données à un endroit précis dans le fichier ?

    Bien à vous.

    Kallidus

  9. #9
    Invité
    Invité(e)
    Par défaut
    Faut-il vraiment te tenir la main jusque là ?
    As-tu au moins lu les tutoriels proposés par LittleWhite ?
    ( ici: http://melem.developpez.com/tutoriel...age=cours#LI-D )
    Dernière modification par LittleWhite ; 06/05/2016 à 07h30. Motif: Pas besoin de citer l'intégralité du message précédent

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par isNaN Voir le message
    Faut-il vraiment te tenir la main jusque là ?
    As-tu au moins lu les tutoriels proposés par LittleWhite ?
    ( ici: http://melem.developpez.com/tutoriel...age=cours#LI-D )
    Oui mais quand je mets la lettre a et que je fais la modification, il l'ajoute à la suite et pas à la place où je suis.

    Et la lettre w , il supprime tous et ajoute l'élément.

    Kallidus

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 724
    Points
    219 724
    Billets dans le blog
    125
    Par défaut
    Pour ajouter des données au milieu d'un fichier, il faut réécrire tout le fichier. Essayez avec un tableau à dix cases. Si vous ajoutez un élément dans une des cases du milieu, toutes les autres cases vont devoir "se décaler". On peut prendre un éditeur de texte aussi, ça marche .

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Merci LittleWhite, j'ai réussi à faire la modification.

    Maintenant, j'essaie d'enregistrer les données de mon fichier dans mon tableau de structure. Comment faire ??

    Merci d'avance.

    Kallidus

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 724
    Points
    219 724
    Billets dans le blog
    125
    Par défaut
    J'imagine que c'est de la lecture d'information. Donc, utilisez fread().

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2016
    Messages : 23
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    J'imagine que c'est de la lecture d'information. Donc, utilisez fread().
    Oui. Donc je fais une boucle fread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(fread(buffeur , sizeof(Donnees) , 1 , fp )>0)
            {
                ????????
            }
    Que mettre dans la boucle pour envoyer les données de mon fichier dans le tableau de structure.

    Merci de votre aide.

    Kallidus

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 898
    Points : 219 724
    Points
    219 724
    Billets dans le blog
    125
    Par défaut
    Peut être fscanf ? Sinon sscanf ? Et ainsi vous analysez les données lues.

Discussions similaires

  1. [Jena] Enregistrement des modifications dans un fichier OWL
    Par waima dans le forum Frameworks
    Réponses: 1
    Dernier message: 06/07/2010, 14h39
  2. Programme de remplacement de texte dans des fichiers
    Par Invité4 dans le forum Linux
    Réponses: 13
    Dernier message: 12/11/2006, 16h06
  3. [XP] recherche dans des fichiers d'extension jsp
    Par drinkmilk dans le forum Windows XP
    Réponses: 5
    Dernier message: 20/10/2005, 08h55
  4. Réponses: 9
    Dernier message: 25/09/2005, 16h33
  5. [Rech. Comp.] Lire et écrire dans des fichiers XML
    Par Rodrigue dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/08/2005, 20h48

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