IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

recherche d'un mot dans un fichier


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut recherche d'un mot dans un fichier
    j'ai fait un programme en c,qui permet de rechercher un mot dans un fichier,mais le programme comporte un probleme,il compare le mot que l'utilisateur veut chercher avec seulement le 1ere ligne,mais pas tous les fichier,s'il vous plait aide j'ai pas pu trouvé cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(void) {
       char tab[BUFSIZ];
       char buffer[BUFSIZ];
       FILE *fp;
      fp=fopen("donnee.txt","r");
        if(fp==NULL)
      {
        perror("fpopen");
        return;
      }
       printf("votre mot\n");
       fgets(tab, sizeof(tab), stdin);
    printf(tab);
       {
           char *p=strchr(tab, '\n');
           if (p!=NULL)
                 *p=0;
       }
       while(fgets(buffer, sizeof(buffer),fp)) {
     
       char *c=strchr(buffer,'\n');
      if(c!=NULL)
      {
      *c='\0';
      }
     
         if(strcmp(buffer,tab)==0)
         printf("le mot existe");
             printf(buffer);          
         }           
     
     
     
       fclose(fp);
       return 0;
    }
    merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par elwess Voir le message
    j'ai fait un programme en c,qui permet de rechercher un mot dans un fichier,mais le programme comporte un probleme,il compare le mot que l'utilisateur veut chercher avec seulement le 1ere ligne,mais pas tous les fichier,s'il vous plait aide j'ai pas pu trouvé cette erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(void) {
       char tab[BUFSIZ];
       char buffer[BUFSIZ];
       FILE *fp;
      fp=fopen("donnee.txt","r");
        if(fp==NULL)
      {
        perror("fpopen");
        return;
      }
       printf("votre mot\n");
       fgets(tab, sizeof(tab), stdin);
    printf(tab);
       {
           char *p=strchr(tab, '\n');
           if (p!=NULL)
                 *p=0;
       }
       while(fgets(buffer, sizeof(buffer),fp)) {
     
       char *c=strchr(buffer,'\n');
      if(c!=NULL)
      {
      *c='\0';
      }
     
         if(strcmp(buffer,tab)==0)
         printf("le mot existe");
             printf(buffer);          
         }           
     
     
     
       fclose(fp);
       return 0;
    }
    merci d'avance
    Désolé, j'ai pas testé mais en le lisant ce code me parait correct. Il doit fonctionner.
    Bien entendu, le fichier n'est composé que de lignes ne contenant qu'un mot par ligne et non plusieurs car la comparaison se fait entre le mot et la ligne entière donc si la ligne contient plusieurs mots...

    Accessoirement la partie affichage du mot pourrait être revue car en l'état, le code affiche tous les mots du fichier et affiche juste "mot existe" en plus s'il trouve le mot en question. Un pb d'accolades peut-être ? Voire aussi d'indentation car même si ce n'est pas primordial en C (ahlàlà vive Python) ça aide quand-même à mieux décortiquer l'algo...

  3. #3
    Membre actif Avatar de quetzacoatl
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 168
    Points : 223
    Points
    223
    Par défaut
    Bonsoir,

    Peut-être est-ce dû à la condition du while, en effet fgets() renvoie un pointeur de type char* qui pointe sur la chaîne lue quand tout se passe bien et sur le pointeur nul sinon

  4. #4
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonjour,

    La fonction strcmp va faire une comparaison de 2 chaînes et retourner 0 si les deux chaines sont identiques. Si ton buffer contient uniquement le mot 'tab', strcmp va retourner 0, sinon une valeur différente de 0.
    Par exemple :
    buffer = "chat" et tab = "chat" ==> strcmp = 0
    buffer = "Le chat noir" et tab = "chat" ==> strcmp <> 0
    Je te conseillerai plutôt d'utiliser la fonction strstr (voir man strstr). Cett fonction retourne un pointeur non null si le mot tab est trouvé dans buffer.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        while(fgets(buffer, sizeof(buffer),fp)) {
            char *t, *c = strchr(buffer, '\n') ;
     
            if(c!=NULL)
                *c = 0 ;    // 0 de fin de chaîne
            else
                continue ;  // Lecture d'une nouvelle ligne
     
            // Recherche du mot 'tab' dans 'buffer'
            t = buffer ;
            while((t=strstr(t, tab))!=NULL)
                printf("mot trouvé en %d colonne de %s\n", (int)(t-buffer), buffer) ;
         }
    (Attention, j'ai pas essayé le code)

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    merci beaucoup,ja'i utilisé la fonction strstr ,et sa marche bien,merci beaucoup

Discussions similaires

  1. find + grep recherche de plusieurs mots dans des fichiers différents
    Par sakura.haruno dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 27/04/2010, 22h58
  2. Recherche, découpage de 'mots' dans un fichier texte
    Par sbibi dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 21/01/2010, 14h26
  3. Recherche d'un mot dans un fichier
    Par chiwawa13 dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/05/2008, 11h33
  4. [C# 1.1]Recherche d'un mot dans un fichier
    Par drzoidberg dans le forum ASP.NET
    Réponses: 2
    Dernier message: 29/11/2006, 13h02
  5. Recherche d'un mot dans un fichier
    Par defluc dans le forum Delphi
    Réponses: 8
    Dernier message: 20/11/2006, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo