avec quel fonction peut on chercher une chaine de caractère dans un fichier texte (avec le langage C)
Merci
-----
avec quel fonction peut on chercher une chaine de caractère dans un fichier texte (avec le langage C)
Merci
Salut,
Je ne connais de fonction C qui permette de rechercher une chaine directement dans un fichier. Voila une fonction, qui fait ce boulot :
Code:// Retourne 1 si la chaine est trouvée dans le // fichier specifié, sinon 0 (Algorithme naif) int find(char *fileName,char *strSearch) { FILE *f; char c; int found=0; int pos=0; int length; f = fopen(fileName,"r"); if( f == NULL ) return 0; length=strlen(strSearch); while( fread(&c,1,1,f)>0 && !found ) { if( c==strSearch[pos] ) { pos++; } else { if(pos!=0) { // On doit rembobiner ! fseek(f,-pos,SEEK_CUR); pos=0; } } found = (pos==length); } fclose(f); return found; }
Pour comparer deux chaînes de caractères:
strncmp et strcmp
Bonjour,
Il existe (au moins sous BSD Unix) la fonction strstr() qui donne la position d'une sous-chaîne dans une chaîne.
-- françois
Salut,
La fonction strstr() fait partie de la librairie standard C, elle devrait donc être disponible sur toutes les platformes. Cepandant, elle ne repond pas au besoin de lui. Il faudrait charger tout le fichier texte dans une chaine et ensuite effectuer la recherche avec strstr(), le problème c'est qu'on ne connait pas la taille max du fichier.
la talle de fichier est de qq octets.
juste pour un détail, peut etre la chaine de caractère recherchée sera supprimeer.
Donc connaissez avez vous une idées pour suprimer une chaine de caractère dans un fichier texte.
merci
Je ne connais pas de fonction C standard qui fasse ça. Tu peux adapter l'algorithme que je t'ai donné dans le post #2.
Bon courage....
j'ai pas bien compris ton exemple #2.
Sera t-il possible de me le détailler plus.
Je te remercie d'avance
Lui
Ben c'est une fonction qui recherche l'occurence d'une chaine de caractère dans un fichier, tu peux trouver une description de cet algorithme sur Wikipedia.
Quelques petites précisions sur la fonction:
Cette ligne lit un caractère du fichier texte et le charge dans la variable c. le test >0 permet de sortir de la boucle si l'on a atteind la fin du fichier, le test !found permet de s'arrêter si on a trouvé la chaine.Code:while( fread(&c,1,1,f)>0 && !found ) {
Ce bout de code détermine si la chaine strSearch est présente dans le fichier. La variable pos représente l'indice du caractère commun. Si pos arrive à la fin de strSearch, found passe à vrai via le test found = (pos==length) et c'est gagné, si on trouve un caratère différent, il faut reprendre la recherche en amont (voir article Wikipedia).Code:if( c==strSearch[pos] ) { pos++; } else { if(pos!=0) { // On doit rembobiner ! fseek(f,-pos,SEEK_CUR); pos=0; } } found = (pos==length);
Si tu as d'autres questions, n'hésite pas....
bonjours
je cherche a ecrire un program C qui permet de chercher si une chaine existe dans les ficher text que contient l'ordinateur mais je ne sais pa comment accéder a tous mes fichiers pour faire le test
est ce que quelqu'un a une solution et merci d'avance
Oh, le beau déterrage...
ce n'est pas un pb de recherche de texte, c'est pb d'énumération des fichiers
et ça se résout différemment selon le système
comme ce n'est pas indiqué, c'est sans doute du windows...
Jusqu'ici tout va bien...
tout d'abors merci et c bien sa mon probleme , je cherche le moyen d'effectuer se déterrage j'utilise le systeme windows 7
Ben quand on intervient en 2010 sur un post de 2007, le déterrage est DEJA effectué !
mon poste n'est pa de 2007 c un nouveau hp G62 de 2010 mais je voulais dire que j'utilise un systeme d'exploitation widows SEVEN
Tu fais du système? Si oui je te conseil de regarder plus près la fonction readdir pour voir ce qu'il se trouve dans ton repertoire.
Cordialement,
The Hatter
Bonsoir
En C++ de bas niveau
Code:WIN32_FIND_DATA FindFileData; HANDLE hFind; hFind = FindFirstFile("*.txt", &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { do { ChercheDansFichier(FindFileData.cFileName); } while (FindNextFile(hFind, &FindFileData)); } FindClose(hFind);
merci bcp pour votre reponse