[langage C] bug parcours de fichier

Fermé
gilles69 - 3 mars 2011 à 17:47
Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 - 3 mars 2011 à 23:14
Bonsoir,

J'ai besoin d'un regard neuf sur un petit boût de code qui ne veut pas fonctionner. Je le présente ci-dessus et l'explique ensuite :

    CHECK = fopen(FNAME,"r");
    INPUT = fopen(FNAME,"r");

    if (INPUT != NULL)
    {
        while(fgets(chaine, TAILLEC, CHECK) != NULL)
        {
            puts(chaine);
            fgets(chaine, TAILLEC, INPUT);
            fseek(INPUT,2,SEEK_CUR);
            if(strcmp(fgets(chaine,9,INPUT),freq500) == 0)
            {
              printf("OK 500 \n");
               //fseek(INPUT,4,SEEK_CUR);
              //fgets(chaine,9,INPUT);
              //fprintf(OUTPUT,"\t  ");
              //fputs(chaine,OUTPUT);
              //fseek(INPUT,4,SEEK_CUR);
             }
  printf("\nSORTI BOUCLE");
        }
                printf("\nSORTI");


Ce que je voudrais, c'est parcourir un fichier texte qui se présente comme deux colonnes de réels séparé par des ;. Je veux parcourir chaque ligne, et sortir quand on arrive à la dernière ligne. Sur chaque ligne, j'effectue un test et s'il est vérifié je copie un boût de fichier.

Mon problème : le programme bug dès que j'effectue le test ( if(strcmp(fgets(chaine,9,INPUT),freq500) == 0) ), quelque soit le contenu du test (c'est pour ça que tout est presque en commentaire à l'intérieur). Il ne semble pas parvenir à effectuer le while(fgets(chaine, TAILLEC, CHECK) != NULL), alors que j'utilise deux pointeurs différents (CHECK et INPUT) pour parcourir le fichier, etq ue CHECK n'est jamais utilisé en dehors que dans le while !!
Si le test est mis en commentaire, aucun problème, le programme est fonctionnel mais n'a évidemment pas d'intérêt puisqu'il ne fait pas ce que je veux .

Une idée ?

Merci d'avance,


A voir également:

1 réponse

Hxyp Messages postés 401 Date d'inscription vendredi 28 janvier 2011 Statut Membre Dernière intervention 27 avril 2014 54
Modifié par Hxyp le 3/03/2011 à 23:28
Bonjour,
Un exemple j'ai rajouté une petite fonction pour récupérer une chaine à partir d'un tokken ça simplifie le truc :

#include <stdio.h> 
#include <stdlib.h> 
#define szbuff 4096 

int gettok(char *recup,const char *str,char tok,int n)
  {
    int i,x,a; for(x=a=i=0;str[i];i++)
      {
        if(str[i]==tok)x++;
        if(x==n&&str[i]!=tok){
            recup[a]=str[i];
            a++;
        }
      }
    recup[a]=0;
    return a;
  }

int main() 
  { 
    FILE *fichier; 
    char buffer[szbuff]; 
    char buffpars[szbuff]; 
    double test=3.14; 
    if((fichier=fopen("text.txt","r"))==NULL) 
      { 
        fprintf(stderr,"erreur fopen\n"); 
      } 
    else 
      { 
        while(fgets(buffer,szbuff,fichier)) 
          { 
            //0 recup le 1er token 1 pour le second etc 
            gettok(buffpars,buffer,';',0); 
            //strtod conversion char en double 
            if(strtod(buffpars,NULL)==test) 
                printf("%s\n",buffpars); 
          } 
        fclose(fichier); 
      } 
    return EXIT_SUCCESS; 
  } 


Edit : oops petite erreur dans gettok corrigée
0