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 :

Lecture de fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Lecture de fichier
    bjr à tous , j'aimerais avoir une petite explication sur la lecture des fichiers en C car j'arrive à lire un fichier mais quand je veux utiliser la fonction fgetpos pour me retourner la position dans le fichier et continuer ma lecture jusqu'en fin de fichier là je n'y arrive pas ; voiçi le code.
    MErçi à tous


    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
    /* lecture du fichier */ 
                  fic=fopen(final,"r+b");           
                  if (fic==NULL) printf("problème ouv lecture %s\n",final);      
                   fread(&pr2,sizeof(struct  processus),1,fic);
                   printf("Lu dans le fichier :%s\n",final); 
                   printf("Numéro d'équipe : %d\n",pr2.num_equipe);
                   printf("PID processus : %d\n",pr2.pid);
                   do
                      {
                        printf("içi boucle do while\n");
                        pos=fgetpos(fic,position);  
                        fseek(fic,SEEK_SET,pos);    
                        fread(&pr2,sizeof(struct  processus),1,fic);
                        printf("Lu dans le fichier :%s\n",final); 
                        printf("Numéro d'équipe : %d\n",pr2.num_equipe);
                        printf("PID processus : %d\n",pr2.pid);
                      }
                   while    (fin_fic=feof(fic)==0) ;

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Par défaut
    Salut,

    Ca manque de code... On sait pas de quel type sont tes variables.
    Poste la fonction entiere.
    Aere ton code !!!!!!
    Et surtout poste un code qui montre clairement ton soucis, parce que la, on ne sait pas si qu'est-ce qui cloche.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par Zoltan_K Voir le message
    Salut,

    Ca manque de code... On sait pas de quel type sont tes variables.
    Poste la fonction entiere.
    Aere ton code !!!!!!
    Et surtout poste un code qui montre clairement ton soucis, parce que la, on ne sait pas si qu'est-ce qui cloche.
    merçi pour ta réponse voiçi les variables du programme :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    int i,equ,ind,randomValue,ret,Nb_lu,fin_fic,pos;
    pid_t pid,pid_pere,pidFils[5],pid2;
    int tubes[5][2];
    char final[6];
    char buf[5];
    char f='F';
    fpos_t *position;
     
    struct processus
      {
        int num_equipe;
        int pid;
      };
    et dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       FILE *fic;
       struct processus pr,pr2;
       int nb_ecrits = 0;

  4. #4
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Salut!
    En fait si c'est pour récupérer la position courante ou s'est arrêté le curseur dans le fichier tu devra utiliser ftell. ça marche bien et c'est fait pour ça.
    Ainsi pour te repositionner in faut utiliser fseek comme tu l'as fait en plaçant tell. Pour le fgetpos que t'as utiliser, celà ne marche que si tu as récupéré la position avec fsetpos. Voilà!
    Tu peux faire un truc de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int tell=0;
    tell=ftell(pointeur_du_fichier);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int tell=0;
    tell=ftell(pointeur_du_fichier)-sizeof(ta structure);
    Bien essaie tout ça et tu me diras s'il ya quelque chose qui cloche! Bon code ;-)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par doderic Voir le message
    Salut!
    Pour le fgetpos que t'as utiliser, celà ne marche que si tu as récupéré la position avec fsetpos. Voilà!

    [/code]

    Bien essaie tout ça et tu me diras s'il ya quelque chose qui cloche! Bon code ;-)
    Bonjour et merçi pour ta réponse . On va y aller par étape si tu veux bien ; en fait j'ai essayé fsetpos et curieusement quand je lui demande d'afficher pos il ne le fait pas pareil avec fgetpos là je comprends pas pourquoi il passe directement à la suite du programme sans tenir compte de la boucle do...while
    Voilà si tu peux m'expliquer... MERCI encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     do
                      {
                        printf("içi boucle do while\n");
                        pos=fsetpos(fic,position);
                        printf("pos = %d\n",pos);
                     
                       
                     } 
                  while    (fin_fic=feof(fic)!=0); /* quand fin_fic = 0 fin de fichier */

  6. #6
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Salut!
    Bien je pense que je me suis un peu mal exprimé. En fait il ya deux choses. Si tu utilises fgetpos pour récupérer une position, c'est avec fsetpos que tu dois te positionner et non avec fseek. Bien! Pour utiliser fseek, alors tu dois avoir récupéré la position courante avec ftell comme je te l'ai dis. Reprenons ce que j'ai donné hier comme code et voyons ce que ça donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ... //tes instructions
    int position=0;
    position=ftell(fic);
    ...
    quand tu reviens à lapartie du code ou tu dois récupérer la position, il te suffira de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...//instructions diverses
    fseek(fic,position,SEEK_SET);
    ...
    En fait, je ne sais pas si c'est trop clair maintenant mais tu peux toujours dire si c'est pas le cas.

  7. #7
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Apparemment tu utilises fwrite pour écrire ds ton fichier vu que tu relis avec fread. Je te proposerai d'utiliser fprintf pour écrire et fgets pour lire, comme ça tu sais toi même à peu près ce que tu fais car fwrite et fread sont plutot adaptés aux fichiers binaires qu'aux fichiers texte...

    En voyant de plus près tu n'as même pas besoin de te positionner, la boucle while te fera tout.
    n'utilise pas do..while, utilise plutot while tout court. Regarde ceci:
    NB: utilises le seulement si tu changes ta façon d'écrire dans le fichier. Ce exmple ne marchera que si dans le fichier, les données sont écrites chacune sur une ligne genre
    ...
    Numéro d'équipe
    PID processus
    Numéro d'équipe
    PID processus
    Numéro d'équipe
    PID processus
    ... //Ainsi de suite


    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
     
    int position=0;
    ...
    fic=fopen(final,"r+b");           
    if (!fic) 
    printf("problème ouv lecture %s\n",final); 
     
    fgets(pr2.num_equipe,sizeof(struct processus),fic);
    fgets(pr2.pid,sizeof(struct processus),fic);
    printf("Lu dans le fichier :%s\n",final); 
    printf("Numéro d'équipe : %d\n",pr2.num_equipe);
    printf("PID processus : %d\n",pr2.pid);
     
    while(!feof(fic))
    {
    fgets(pr2.num_equipe,sizeof(struct processus),fic);
    fgets(pr2.pid,sizeof(struct processus),fic);
    printf("Lu dans le fichier :%s\n",final); 
    printf("Numéro d'équipe : %d\n",pr2.num_equipe);
    printf("PID processus : %d\n",pr2.pid);
    }
    Essaie de nouveau tout ça et tu me diras, ça doit marcher. Pour l'écriture dans le fichier avec fprintf ça doit ressembler à ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fprintf(fic,"%d\n",pr2.num_equipe);
    fprintf(fic,"%d\n",pr2.pid);
    Voilà, essaie le tout
    Bon code à toi

  8. #8
    Membre confirmé Avatar de doderic
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 215
    Par défaut
    Hi! je me suis dis qu'au cas où tu aimerais garder ton fread alors le code qui coreespondrait est ceci:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    fread(pr2,sizeof(struct processus),1,fic);
    printf("Lu dans le fichier :%s\n",final); 
    printf("Numéro d'équipe : %d\n",pr2.num_equipe);
    printf("PID processus : %d\n",pr2.pid);
     
    while(fread(pr2,sizeof(struct processus),1,fic));
    {
    printf("Lu dans le fichier :%s\n",final); 
    printf("Numéro d'équipe : %d\n",pr2.num_equipe);
    printf("PID processus : %d\n",pr2.pid);
    }
    C'est bon now! A+ et n'oublie de passer en mode résolu si c'est fait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Windows]lecture des fichier lnk (raccourcis)
    Par Tiaps dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 21/10/2009, 19h27
  2. [jsp]lecture de fichier
    Par antigone dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/09/2003, 11h05
  3. [AS400][Intranet][PC] Lecture de "fichiers" AS400
    Par lando dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 16/07/2003, 11h11
  4. Lecture de fichier
    Par Watcha dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 04/03/2003, 20h43
  5. Lecture de fichiers ".WAV"...
    Par 0x4e84 dans le forum Langage
    Réponses: 2
    Dernier message: 03/09/2002, 09h43

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