Se connecter / S'enregistrer

Résolu Chercher une chaine de caractères dans un fichier avec fgets

Solutions (3)
Tags :
  • Connexion
  • Programmation
|
Bonjour, j'essaie de chercher une chaine de caractère dans un fichier avec la fonction fgets mais ca ne fonctionne pas comme prévu. La chaine de caractère n'est trouvée que si elle est à la dernière ligne de mon fichier ou si elle est la seule chaine dans le fichier.
Exemple 1: les chaines sont de longueur variables et stockées comme suit dans le fichier
Chaine 1
Chaine 2
Chaine 3
==>Impossible de trouver les deux premières chaines. Mais si je demande la troisième, aucun souci.
Exemple 2:
Chaine 1
La recherche me trouve bien Chaine 1.

Voici la partie du code qui s'occupe de chercher la chaine:
  1. int stop=0;
  2. if (fichier!=NULL)
  3. {
  4. do
  5. {
  6. fgets(buffer,sizeof(buffer),fichier);
  7. //si la chaine est egale a celle dans le buffer
  8. if (strcmp(chaine_a_trouver,buffer)==0)
  9. {
  10. //Modification de l'état de connexion
  11. gtk_label_set_text(GTK_LABEL(pApp->pConxState),chaine);
  12. stop=1;
  13. break;
  14. }
  15. }
  16. while( (fgets(buffer,sizeof(buffer),fichier)!=NULL) );
  17.  
  18. if (stop!=1)
  19. gtk_label_set_markup(GTK_LABEL(pApp->pConxState),"<span font_desc=\"Verdana 10\">Chaine non trouvee dans le fichier \n \tVeuillez recommencer</span>");
  20.  
  21. fclose(fichier);
  22. }
Contenus similaires
Meilleure solution
partage
|
tu rappelles fgets dans la condition du while ...
  • Commenter cette solution |
Score
0
òh
òi
|
J'ai trop vite crié victoire. Maintenant, il trouve toutes les chaines meme s'elles qui ne sont pas dans le fichier.
Une idée?
  • Commenter cette réponse |
Score
0
òh
òi
|
chrisz a dit :
tu rappelles fgets dans la condition du while ...

Tu avais en effet raison. Voici la version modifiée. Et elle marche comme je veux maintenant. Merci :bounce:  :) 
  1. if (fichier!=NULL)
  2. {
  3. do
  4. {
  5. if ( (fgets(buffer,sizeof(buffer),fichier)!=NULL) || (strcmp(chaine_a_trouver,buffer)==0) )
  6. {
  7. stop=1;
  8. //Modification de l'état de connexion
  9. gtk_label_set_text(GTK_LABEL(pApp->pConxState),chaine);
  10. break;
  11. }
  12. }
  13. while(stop);
  14.  
  15. if (stop!=1)
  16. gtk_label_set_markup(GTK_LABEL(pApp->pConxState),"<span font_desc=\"Verdana 10\" foreground=\"#FF0000\">Chaine introuvable\n \tVeuillez recommencer</span>");
  17.  
  18. fclose(fichier);
  19. }


P.S: Tu peux m'expliquer un peu en détails pourquoi ca marchait pas? Est-ce dû au fait que je rappelle deux fois fgets ou bien parce que le fgets était dans la condition du while? J'aimerais si possible comprendre afin d'éviter ca la prochaine fois.
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS