[langage C] bug parcours de fichier

gilles69 -  
Hxyp Messages postés 401 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   54
 
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