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 :

[Aide] Rechercher une chaine de caractére dans un fichier existant


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut [Aide] Rechercher une chaine de caractére dans un fichier existant
    Bonjour, je suis entrain de coder un programme dans lequel j'aurai besoin de pouvoir chercher dans un fichier un chaine de caractére que l'utilisateur du programme aurait entré (reccueillit avec un scanf ou autre).

    Pour vous expliquer ça plus clairement je voudrais quelque chose comme ça :

    Citation Envoyé par le prog
    Veuillez entrer la chaine de caracteres :

    La chaine identique suivante a ete trouvee dans la base de donnee : "la chaine trouvé ici"
    Voila j'espére que vous m'avez compris, et donc le probléme c'est que je ne sais pas comment faire ceci (la chaine est recherchée dans un fichier texte) et pour information (pas sure que ça change grand chose) je suis sous windows.

    J'éspére que quelqu'un pourra m'aider, merci

    A bientôt.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je viens d'enlever le [resolu] !
    Finalement je cherches toujours une réponse, merci

  3. #3
    Membre averti
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Points : 387
    Points
    387
    Par défaut
    Hello,

    Citation Envoyé par Tananca
    Je viens d'enlever le [resolu] !
    Finalement je cherches toujours une réponse, merci
    Tu peux utiliser fgets() pour lire (ligne par ligne) une chaine de caractères depuis un flux, que ce soit un fichier sur disque ou le flux rattaché à l'entrée standard( console). Ensuite la fonction strstr() te permet de rechercher une chaine dans une autre.

    A+

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Que des choses que je savais déja -_-
    J'ai pas encore aquéris la logique du C, merci de m'avoir donné cette idée

    bye :]

    (Si quelqu'un a plus court ou plus efficace je suis à l'écoute.)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai un petit probléme avec cette technique je vous laisse voir vous même :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define gdr_md5 500
     
    int main(int argc, char *argv[])
    {
      FILE *bdd = NULL;
      bdd = fopen("bdd.md5", "r");
      char hash[gdr_md5] = ""; 
      char user_hash[gdr_md5] = "";
      char *result = NULL;
      printf ("\t====================    ");  
      printf ("\n\t== CASSEUR DE MD5 ==    ");
      printf ("\n\t====================    ");
      if (bdd != NULL)
      {
              fgets (hash, gdr_md5, bdd);
              printf ("\n\n\n Veuillez entrer le hash md5 : ");
              scanf ("%s", &user_hash);
              while (fgets(hash, gdr_md5, bdd) != NULL) 
              {
                    sprintf(*result,"%s", strstr(hash, user_hash));
     
              }
              printf ("\n\n Le resultat est : \n\n  %s", *result);
              fclose(bdd);
      }
      else
      {
              printf("\n\n Impossible de lire la base de donne\n\n");
      }
     
      return 0;
    }
    Le code se compile sans probléme mais arrivé au moment ou le programme lis bdd.md5 il ne se passe plus rien, le programme reste bloqué à ce point.
    Si quelqu'un comprend pourquoi, je vous écoutes.

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Tananca
    J'ai un petit probléme avec cette technique je vous laisse voir vous même :
    <...>
    Le code se compile sans probléme
    Ben voyons...
    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
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:21: warning: char format, different type arg (arg 2)
    main.c:24: warning: passing arg 1 of `sprintf' makes pointer from integer without a cast
    main.c:27: warning: format argument is not a pointer (arg 2)
    main.c: At top level:
    main.c:7: warning: unused parameter 'argc'
    main.c:7: warning: unused parameter 'argv'
    Linking console executable: C:\dev\forums\forums.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 5 warnings
    mais arrivé au moment ou le programme lis bdd.md5 il ne se passe plus rien, le programme reste bloqué à ce point.
    Si quelqu'un comprend pourquoi, je vous écoutes.
    Déjà, il faurait mettre le code au point... Ensuite, que se passe-t-il si strstr() retourne NULL ?

    Ton code commenté...
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define gdr_md5 500
     
    int main(int argc, char *argv[])
    {
       FILE *bdd = NULL;
       bdd = fopen("bdd.md5", "r");
       char hash[gdr_md5] = "";
       char user_hash[gdr_md5] = "";
       char *result = NULL;
       printf ("\t====================    ");
       printf ("\n\t== CASSEUR DE MD5 ==    ");
       printf ("\n\t====================    ");
       if (bdd != NULL)
       {
          fgets (hash, gdr_md5, bdd);
          printf ("\n\n\n Veuillez entrer le hash md5 : ");
          /* -ed-
                    scanf ("%s", &user_hash);
           
          avec scanf(), "%s" attend l'adresse d'un char et non d'un tabe&au de char...
          */
          scanf ("%s", user_hash);
     
          while (fgets(hash, gdr_md5, bdd) != NULL)
          {
             sprintf(*result, "%s", strstr(hash, user_hash));
             /* -ed-
             '*result' invoque un comportement indetermine (result valant NULL). 
             De plus, c'est un char, ce qui n'est pas le type attendu par le premier 
             parametre de sprintf(). En consequences, le comportement est indetermine
              
             si strstr() retourne NULL, le comportement est indetermine.
              
             Bref, ce code est gravemebt bugge...
             */
          }
          printf ("\n\n Le resultat est : \n\n  %s", *result);
          /* -ed- encore une fois, *result n'a aucun sens.
          Un pointeur NULL ne va pas, comme par magie, se metre à pointer 
          vers une zone valide... Il faut unt affectation correcte... 
          */
          fclose(bdd);
       }
       else
       {
          printf("\n\n Impossible de lire la base de donne\n\n");
       }
     
       return 0;
    }

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut super simple
    c'est tres simple
    tu mets bien sur un pointeur sur le debut du fichier,puis tu utilise une boucle do_while qui va parcourir le fichier du debut a la fin,et a l interieur de cette boucle,tu dois mettre la fonction strcmp,c est elle qui comparera ta chaine de caractere avec le contenu du fichier
    voila,j espere que ta compris

  8. #8
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Si tu utilises strcmp, tu compares les deux chaînes (résultat => identiques ou non). Si j'ai bien compris, le but est plutôt de chercher une sous-chaîne (résultat => contient ou pas).

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 44
    Points : 28
    Points
    28
    Par défaut strcmp
    Ca revient au meme zorro
    parce que si tu la trouve (strcmp==0),tu mets un message,sinon ,tu mets que la chaine n existe pas

    Moi c est c est que j ai utiliser dans un programme que j avais realiser et ca marche tres bien

  10. #10
    Membre éprouvé Avatar de zooro
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 921
    Points : 1 260
    Points
    1 260
    Par défaut
    Ben non, les deux fonctions n'ont pas le même objectif.
    Si tu utilises strcmp pour comparer "de" et "abcde", le résultat sera "Différent".
    Alors que si tu utilises strstr, le résultat indiquera que la sous-chaîne "de" a été trouvée dans "abcde".

Discussions similaires

  1. Rechercher une chaine de caractères dans le nom d'un fichier
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/06/2008, 17h54
  2. [Selenium] Rechercher une chaine de caractères dans un textarea
    Par hocinema dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 20/07/2007, 14h56
  3. rechercher une chaine de caractère dans un fichier
    Par 3FHFEB dans le forum Langage
    Réponses: 1
    Dernier message: 26/10/2006, 11h13
  4. Réponses: 3
    Dernier message: 25/07/2006, 08h40
  5. [VB]Recherche d'une chaine de caractère dans un fichier
    Par Empty_body dans le forum VB 6 et antérieur
    Réponses: 26
    Dernier message: 16/02/2006, 09h10

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