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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    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
    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 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 averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    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
    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 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 averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Tunisie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 24
    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
    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 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 ?

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