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 :

Rechercher un caractère dans un fichier et afficher tous les résultats


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2020
    Messages : 4
    Par défaut Rechercher un caractère dans un fichier et afficher tous les résultats
    Bonjour tout le monde,

    Je viens de débuter en C, je fais beaucoup d'exercices pour m'entraîner mais malheureusement je suis tombé sur un os, je vous explique. Pour ceux qui connaissent "Unix" je dois faire un code qui fait la même chose que "grep", mais une des conditions c'est de ne pas utiliser la librairie "string.h" et aussi d'utiliser deux champs de caractère "argv[1]" et "argv[2]" qui doivent être dans le main, le argv[1] doit prendre le champs de caractère à rechercher et argv[2] doit prendre le nom du fichier, je sais comment faire pour ouvrir un fichier mais malheureusement la où je coince c'est la recherche du caractère et aussi de sortir tous les éléments du fichier. Je pense que je dois utiliser un "Regex".. J'ai vraiment besoin de votre aide je vous en serai très reconnaissant

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    Je pense que si tu ne peux pas utiliser la bibliothèque string.h c'est pour ne pas utiliser les fonctions strcmp, strncmp, et petites sœurs (<- 2 liens cplusplus.com en anglais)

    Donc regarde ce fil de discussion et mes 2 réponses : celle algorithmique et celle avec du code
    En gros, il faut coder 2 boucles : 1 pour parcourir ton texte et 1 autre pour tester caractères par caractères le mot à rechercher et ton texte (et comme je le disais, en cas d'échec de reconnaissance, il faut revenir au premier caractère testé "positif" à cause des motifs qui se répètent)

    Et après, il faut te poser 1 question : est-ce que ton mot à rechercher peut contenir les caractères de fin ligne '\n' (Line Feed) et/ ou '\r' (Carriage Return) ou pas ?
    • Si non, tu peux lire ton fichier ligne par ligne avec la fonction fgets (<- lien cplusplus.com en anglais)
    • Si oui (mais également non ), il faut charger ton fichier dans 1 buffer (en gros, c'est 1 grosse chaîne de caractères). Il me semble qu'il faut lire 1 fois ton fichier pour calculer le nombre de caractères (avec la fonction fgetc) allouer 1 buffer avec ce nombre de caractères, le remplir en relisant ton fichier, faire ta recherche et libérer la mémoire. Ouais, c'est nettement plus long

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2020
    Messages : 2
    Par défaut
    Je te remercie pour ta réponse super clair ! Je comprends la majorité de ce que tu me dis mais il y a juste parcourir la chaîne de caractère je ne vois pas très bien comment faire, peux tu m'expliquer plus en détail s'il te plaît ? Ou me donner un exemple ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 771
    Par défaut
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
     
    /*****************************************************************************/
    /***********************************  Main  **********************************/
    /*****************************************************************************/
     
    int main(int argc, char** argv)
    {
        char str[] = "Qu'en pensez-vous ?"; // constant string
     
        char* c;
        size_t len = strlen(str); // <- use string.h
        size_t index;
     
    //  Method 1 : index    
        for(index=0; index < len; ++index) {
            printf("%02lu: %c\n", (index + 1), str[index]);
        }
     
    //  Method 2 : pointer
        for(c=str, index=1; (*c) != '\0'; ++c, ++index) {
            printf("%02lu: %c\n", index, (*c));
        }
     
     
        return EXIT_SUCCESS;
    }

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Juin 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juin 2020
    Messages : 2
    Par défaut
    Je te remercie malheureusement je n'y arrive pas, je laisse tomber ahah c'est trop compliqué je n'arrive qu'à ouvrir un fichier, merci quand même pour ton aide

  6. #6
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 315
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 315
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Ivankof51 Voir le message
    Je te remercie malheureusement je n'y arrive pas, je laisse tomber ahah c'est trop compliqué je n'arrive qu'à ouvrir un fichier, merci quand même pour ton aide
    Bonjour.

    Il ne faut pas baisser les bras à la première difficulté rencontrée.

    Il faut intégrer certains concepts. Je pars comme situation de base que les chaînes sont codées en ASCII. C'est à dire que toutes les lettres rencontrées seront comprises entre 1 et 255. Pour exemple la lettre A est codée en 65 décimal.

    Une chaîne de caractères n'est qu'un simple tableau. La norme en C veut que cette chaîne se termine par un code spécial qui indique que la chaîne est finie. Ce code est '\0'.

    Par exemple la chaîne suivante "Bonjour" sera codée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    66 111 110 106 111 117 114 0
    Donc ce tableau contiendra le nombre de lettres + 1 pour le caractère de fin.

    foetus utilise strlen(str); qui fait partie de string.h. Tu peux déjà reconstruire cette fonction si tu en besoin en interne. Il te suffit de parcourir le tableau en incrémentant un compteur jusqu'à rencontrer le caractère '\0'.

    Tu peux aussi travailler la chaîne dans une simple boucle while ();. Dans l'exemple suivant je n'utilise pas les pointeurs pour ne pas te perdre. Je conserve l’écriture sous forme de tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    char text []= "Bonjour";
    int i = 0; // index pour se déplacer dans la chaîne. 0 correspond à la première lettre de la châine.
     
    while (text[i]!='\0')
    {
      printf ("%c", text [i]); // Affichage du caractère actuellement pointé
      i++;
    }
    prinf ("\n"); // Un simple retour chariot
    Voila un début pour te permettre d’appréhender la problématique. Rien qu'avec ce petit exemple de code tu devrais pouvoir t'en sortir. N'hésite pas à poster ton code pour qu'on puisse te dire comment avancer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rechercher un caractère dans un fichier texte
    Par kema1985 dans le forum C#
    Réponses: 3
    Dernier message: 09/06/2016, 08h35
  2. Recherche du caractère "³" dans un fichier texte
    Par SearchProblem dans le forum Langage
    Réponses: 5
    Dernier message: 25/06/2013, 19h51
  3. [AC-2010] Caractère * dans un critère pour retourner tous les enregistrements
    Par oplaut dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 04/03/2013, 18h28
  4. Afficher tous les résultats
    Par PAYASS59 dans le forum Webi
    Réponses: 4
    Dernier message: 11/08/2010, 11h14
  5. recherche de caractères dans un fichier
    Par shnouf dans le forum Langage
    Réponses: 4
    Dernier message: 14/11/2006, 10h45

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