Extraction d'un mot dans un fichier en C

elwess Messages postés 6 Statut Membre -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir mes amis,
j'ai un fichier .txt,et je veut faire un programme qu'a chaque fois trouve le mot alors,il fait le copie de ce mot et le mettre dans un variable par exemple

fichier texte
si a et b alors mot
si x et y alors nombre


dans cet exemple je veut chercher le mot alors puis extraire le mot qui le suive,comme "mot"et "nombre"
je pense qu'il faut utiliser fseek et strcpy,mais je ne sais pas comment faire.

merciii bcp

2 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Bonjour,
    Je vois pas à quoi va te servir fseek.
    Ce qu'il te faut utiliser sont les fonctions, fgets, strstr
    Tu fais une boucle while pour lire tout le fichier.
    Tu lis chaque ligne avec fgets (en considérant que chaque ligne aura un nombre max de caractères).
    Tu utilises strstr() pour savoir si "alors" est contenu dans la phrase. S'il l'est alors strstr te renverra un pointeur sur "alors ....". Il ne te reste plus qu'à décaler le pointeur de 6 caractères sur la droite pour récupérer le contenu après "alors ".
    Cdlt,
    0
  2. elwess Messages postés 6 Statut Membre
     
    merci beaucoup pour votre réponse,j'ai fait un programme comme tu m'a dit mais toujours j'ai un erreur.j'ai besoin de votre aide pour trouver cette erreur

    le fichier texte
    d.txt
    Fait  
          -Fait france           
          -Fait paris  
          -Fait italie   
          -Fait europe       
    regle  
    R1# Si paris alors france  
    R2# Si france alors europe  
    R3# Si venis alors italie    
    R4# Si italie alors europe  
    


    le programme
    #include<stdio.h>  
    #include<stdlib.h>  
    #include<string.h>  
    
    int main(void)   
    {                       
     FILE *fp;                                                         
     char mot[BUFSIZ];  
     char buffer[BUFSIZ];  
     fp=fopen("d.txt","r");                                      
        if(fp==NULL)  
         {   
      fputs("erreur à l'ouverture du fichier\n",stderr);  
      return EXIT_FAILURE;   
         }  
            while(fgets(buffer, sizeof(buffer),fp))                    
        {  
             
               
            char *c=strchr(buffer,'\n');                               
                     if(c!=NULL)  
                     {  
                      *c='\0';  
                     }  
          if((strstr(buffer,"alors")==0))  
      {   
                   fseek(fp,6,SEEK_CUR);  
                           fgets(mot,100,fp);  
                    puts(mot);  
                    }  
       }  
    fclose(fp);  
    return 0;  
    }  
    


    le resultat d'execution
    -Fait france           
    
    -Fait italie   
    
    R1# Si paris alors france  
    
    R1# Si paris alors france  
    


    merci beaucoup pour votre aide
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Tu utilises fseek, alors que j'ai dit qu'il ne fallait pas l'utiliser...
      Ensuite tu rutilises fgets après. Ca ne peut pas marcher.
      Et, il ne vaut pas mettre de strchr('\n'). Cette astuce marche lorsque tu lis stdin.

      Mon précédent post te donnait l'algorithme.
      Cela donne :
      while(fgets...) {  
         char*p=strstr(...);  
         if(p) {  
            puts(p[6]);  
         }  
      }  
      

      PS : et en plus tu fais des double posts...
      0