Forum Clubic

Recherche d'une chaine dans un fichier - C/C++

Bonjour.

j’accède à un fichier txt en mode lecture, et je souhaite le parcourir afin d’y trouver une chaine de caractère. Pour le moment je veux juste savoir si cette chaine se trouve dans le fichier parcouru.

Il y a sans doute plusieurs méthodes, mais quelle fonction à utiliser en C vous parez la plus adaptée ?

thx :]

si tes chaines se trouvent sur une ligne sans etre coupés : getline pour lire ligne par ligne.

puis tu fais un find de ta chaine sur ta ligne.

voir :
http://www.iut-orsay.fr/dptinfo/Pedagogie/…s/clString.html

ou google : c++ string

strstr

Merci pour vos réponses.

Cependant je n’arrive pas à utiliser getline :frowning:

‘getline’ undeclared (first use this function)… J’utilise actuellement DevC++

j’ai pris aussi un example sur le net, mais même erreur de compilation:

       #include <stdio.h>
       #include <string.h>
       #include <stdlib.h>


       int main(void)
       {
            FILE * fp;
            char * line = NULL;
            size_t len = 0;
            ssize_t read;
            fp = fopen("C:\\trilili.txt", "r");
            if (fp == NULL)
                 exit(EXIT_FAILURE);
            while ((read = getline(&line, &len, fp)) != -1) {
                 printf("Retrieved line of length %zu :\n", read);
                 printf("%s", line);
            }
            if (line)
                 free(line);
            return EXIT_SUCCESS;
       }

J’ai essayé aussi strc qui est simple d’utilisation sur les chaines de caractères:

char * strstr ( const char *, const char * );

Mais la chaine que je recherche, se trouve dans un fichier que j’accède par fopen.
Si j’essaye ça:


        FILE * myfile;
        myfile = fopen ("C:\\test.txt","r");  

	if(!myfile){
                       printf("le fichier n'existe pas !");
                       return;
	}
	
    fstring = strstr(myfile,"simple"); //cherche "simple" dans test.txt
                             //.......

…j’ai évidemment une erreur de compilation :’)

Comment résoudre ce problème ?

C’est parce getline(), c’est du C++ (je crois que c’est une méthode de la classe istream).

Dans ton cas, c’est fgets.

Et pour résoudre ton problème, y a pas 36 solutions : tu prends un buffer de lecture, via fread, et tu cherches ton motif dans le buffer (en faisant attention au fait que ton motif peut se trouver en fin de ligne, etc).