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 d'un enregistrement dans un fichier


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Modification d'un enregistrement dans un fichier
    la question est comment modifier un numéro enregistré dans un fichier, cad comment peu on accéder à ce numéro & le modifier ?
    ce progrmmae ci dessous, me permet de créer un fichier, d'enregistree des donnée d'un abonné dans ce fichier, puis il faut accéder à une donnée ( numéro ) pour l'incrémenter :
    en utilise "fseek (fichier,0,1);" pour l'acces
    et pour modifier le numéro jai utilisé ce ci :
    "fread (&a.num,sizeof(abonne),1,fichier);
    a.num ++ ;
    fwrite(&a,sizeof(abonne),1,fichier);"
    est ce que c'est correcte d'utiliser ces instructions pour réaliser l'acces puis la modification ?
    ce programme ci dessous est compilé, mais il se plante dans l'exécution, c'est quoi le problème ?

    (merci de m'aidez à résoudre ce pb)

    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
    # include <stdio.h>
    # include <string.h>
    # include <conio.h>
    # include <stdlib.h>
     
    typedef struct 
    {
       char nom [20];
       char adresse [20];
       int nbpassage;                   /* pas encore payé */
       int num;
    }abonne;
     
    void creation ( abonne x, FILE *f)
    {
       int i=1;
       char c;
     
       do    
       {
          printf("donner le nom de %d eme abonnee :\n",i);
          scanf("%s",x.nom);
          printf("donner l'adresse de l'abonnee:\n");
          scanf("%s",x.adresse);
          printf("donner le nombre de passage non paye de l'abonnee:\n");
          scanf("%d",&x.nbpassage);
          printf("donner le numero de l'abonne dans le fichier \n");
          scanf("%d",&x.num);
          fwrite(&x,sizeof(abonne),1,f);
          i++;
          printf("voulez vous saisir un autre abonne  o/n:\n");
          c=getch();
       }while(c=='o'||c=='O');
    }
     
    int main ()
    {
       FILE *fichier;
       abonne a;
       int p ;
     
       fichier = fopen("c:/fichier.txt","w+");
       if ( fichier = NULL )
       {
          printf("fichier inexitant !");
          exit(1);
       }
       else
       {
          creation(a,fichier);
       }
     
       /* Modification de nombre de passage */
       printf("tapez le numéro d'abonné pour modifier: ");
       scanf("%d",&p);                          
       fseek (fichier,0,1);
       fread (&a.num,sizeof(abonne),1,fichier);
       a.num ++ ;
       fwrite(&a,sizeof(abonne),1,fichier);
       fclose(fichier);
    }

  2. #2
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sablito
    la question est comment modifier un numéro enregistré dans un fichier, cad comment peu on accéder à ce numéro & le modifier ?
    La réponse simple, c'est "on ne peut pas."

    En fait, il est difficile et non portable de modifier un fichier existant. Ce qu'on sait faire facilement, c'est copier le fichier en insérant la modification à la volée C'est le moyen le plus simple, le plus fiable, le plus sûr (possibilité de revenir en arrière) mais pas le plus rapide si le fichier es gros.

    Dans ce cas, l'usage d'une vraie base de données genre SQL sera toujours plus performante. (SQLite, par exemple).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    et l'éxécution de mon programme a été faite sans pb ?
    ( en lagage C avec Dev )
    car c bien compilé mais le programme se plante lors de son éxécution !

  4. #4
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sablito
    et l'éxécution de mon programme a été faite sans pb ?
    ( en lagage C avec Dev )
    car c bien compilé mais le programme se plante lors de son éxécution !
    J'ai pas vu de programme...

    Tu parles du texte qui produit ça :

    Project : Forums
    Compiler : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:43: warning: suggest parentheses around assignment used as truth value
    main.c:61: warning: control reaches end of non-void function
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 2 warnings
    Il faudrait déjà corriger ça...

    D'autre part, si tu lisais et tenais compte des réponses déjà données, ça éviterait qu'on ai l'impression de perdre notre temps et de parler aux murs...

    http://www.developpez.net/forums/sho...65&postcount=2

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    j'ai compilé mon programme avec DevC, lors de l'exe il m'envoie un erreur de 'fin de tache' !!!!

  6. #6
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sablito
    j'ai compilé mon programme avec DevC, lors de l'exe il m'envoie un erreur de 'fin de tache' !!!!
    Tu as corrigé les défauts que je t'ai signalés ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    mon prog ne contient pas d'erreur selon DevC, il est compilé

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par sablito
    mon prog ne contient pas d'erreur selon DevC, il est compilé
    Normal, ton compilateur n'est pas bien réglé, si tu lui met au minimum les options de compilation:
    tu vas avoir de la misère et d'ailleurs dans ton code:
    ici tu fait une affectation alors que le if attend une expression de comparaison par exemple (c'est pour ca qu'il te demande d'entourer ton expression par des parenthèses) donc:
    et pour finir, main retourne toujours un int et ici tu ne fait rien !


    Compilé ne veut pas dire sans erreurs, ici ce sont des avertissements qu'il te donne ! Voilà tes erreurs

  9. #9
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par sablito
    mon prog ne contient pas d'erreur selon DevC, il est compilé
    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  10. #10
    Expert éminent sénior
    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
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Franck.H
    Compilé ne veut pas dire sans erreurs, ici ce sont des avertissements qu'il te donne ! Voilà tes erreurs
    Il y en a peut être d'autres...

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il y en a peut être d'autres...
    Tout est possible

    En plus de ca, j'aurais pas utilisé getch mais getchar, c'est plus portable

    J'aurais également mis le premier argument de la fonction de creation en pointeur vers la structure pour que les changement se répercutent dans la variable a qui se situe dans le main et j'aurais passé ainsi l'adresse de a dans l'appel de la fonction depuis le main !


    Enfin voilà à vu de nez mes quelques remarques en lisant le code en diagonale

Discussions similaires

  1. [WD18] enregistrement dans un fichier aprés la modification sur la table
    Par fcboumi13 dans le forum WinDev
    Réponses: 2
    Dernier message: 21/12/2013, 20h22
  2. Réponses: 18
    Dernier message: 09/05/2007, 12h06
  3. [LG]Enregistrements dans un fichier
    Par ticoude dans le forum Langage
    Réponses: 1
    Dernier message: 26/11/2004, 18h33
  4. [LG]supprimer un enregistrement dans un fichier
    Par Marcus2211 dans le forum Langage
    Réponses: 10
    Dernier message: 17/11/2003, 00h59
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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