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 :

Ressortir un mot d'une phrase d'un fichier texte


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut Ressortir un mot d'une phrase d'un fichier texte
    Bonjour tout le monde ,

    Voila j'ai un petit soucis qui commence à se transformer en gros soucis

    Aprés l'ouverture d'un fichier texte, j'aimerai récupérer seulement les couleurs de chaque lignes, mais je ne sais pas comment faire.
    Voici comment se présente le fichier texte :

    rouge chaleur passion colere
    bleu sagesse fraîcheur
    jaune connaissance amitié
    vert stabilité concentration

    Je veux donc ressortir seulement les couleurs du fichier.

    J'ai visualisé "strtok" et "sscanf", mais ça ne m'aide pas beaucoup.

    Merci.

  2. #2
    Membre chevronné Avatar de Jenna
    Inscrit en
    Décembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Décembre 2009
    Messages : 272
    Par défaut
    lire le fichier ligne par ligne avec fgets()

    et pour chaque ligne lue, extraire le 1er mot avec strtok()

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Jenna Voir le message
    lire le fichier ligne par ligne avec fgets()

    et pour chaque ligne lue, extraire le 1er mot avec strtok()
    Merci pour ta rapidité.

    Pas de soucis avec fgets. Si je ne connais pas à l'avance la couleur, mais seulement sa position (début de chaque ligne) strtok marchera quand même ?

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Il_TiRaNNo Voir le message
    Si je ne connais pas à l'avance la couleur, mais seulement sa position (début de chaque ligne) strtok marchera quand même ?
    Oui, tu lui donne juste comme séparateur l'espace " "
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Franck.H Voir le message
    Oui, tu lui donne juste comme séparateur l'espace " "
    Merci, ça fonctionne correctement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Bonjour tout le monde, (encore moi)

    Strtok () fonctionne correctement , j'arrive à ressortir la couleur, mais maintenant je dois ressortir le deuxième mot de la ligne :
    Voici le code pour ressortir le premier mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                fgets(tanpon, TAILLE_MAX, fichier); // tanpon : tableau 
                buffer = strdup ( tanpon );
                pcouleur=strtok(buffer," ");
    Dois-je créer un nouveau pointeur est lui affecter par exemple :
    pointeur=strtok(buffer,pcouleur) ??


    Merci d'avance.

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Franchement moi ce que je ferais à ta place, c'est peut-être du travail mais une fois fait y'a plus à revenir dessus, ce serait de créer une liste chaînée dont chaque noeud correspondrais à une couleur et dans chaque noeud serait stocké chaque mot à part.

    Sinon, si tu veux continuer dans ta voie, uniquement le premier appel à strtok doit avoir une adresse comme tu le faits là mais ensuite, si tu veux travailler sur la même chaîne, il faut passer le premier argument à NULL sinon tu recommences au début de ta chaîne !

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeur = strtok (NULL, " ");
    Un exemple sur la bonne utilisation de strtok ici (chapitre V) !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Merci, je vais essayer de suivre votre conseil.

    Bonne soirée.

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 553
    Par défaut
    Bonsoir,

    Citation Envoyé par Il_TiRaNNo Voir le message
    Strtok () fonctionne correctement , j'arrive à ressortir la couleur, mais maintenant je dois ressortir le deuxième mot de la ligne :
    Voici le code pour ressortir le premier mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                fgets(tanpon, TAILLE_MAX, fichier); // tanpon : tableau 
                buffer = strdup ( tanpon );
                pcouleur=strtok(buffer," ");
    Tampon s'écrit avec un « m ».

    strtok() est faite pour être appelée de manière récurrente. Cette fonction garde trace de la chaîne qu'elle a découpée, jusqu'au dernier token.

    Pour récupérer le token suivant d'une même chaine, il faut appeler strtok() avec une chaîne NULL. Exemple :

    Code C : 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 <string.h>
     
    int main (void)
    {
        char * chaine = NULL;
        char * ptr    = NULL;
        char * token  = NULL;
     
        chaine = strdup ("Paix sur la terre aux hommes de bonne volonté");
        ptr = chaine;
     
        while ((token=strtok(ptr," "))!=NULL)
        {
            puts(token);
            ptr = NULL; /* ptr = « chaine » la première fois, NULL les suivantes. */
        }
     
        free (chaine);
        return 0;
    }
     
    Paix
    sur
    la
    terre
    aux
    hommes
    de
    bonne
    volonté

    ÉDIT : Grillé le temps de rédiger le post en entier. :-)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Bonsoir,



    Tampon s'écrit avec un « m ».

    strtok() est faite pour être appelée de manière récurrente. Cette fonction garde trace de la chaîne qu'elle a découpée, jusqu'au dernier token.

    Pour récupérer le token suivant d'une même chaine, il faut appeler strtok() avec une chaîne NULL. Exemple :

    Code C : 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 <string.h>
     
    int main (void)
    {
        char * chaine = NULL;
        char * ptr    = NULL;
        char * token  = NULL;
     
        chaine = strdup ("Paix sur la terre aux hommes de bonne volonté");
        ptr = chaine;
     
        while ((token=strtok(ptr," "))!=NULL)
        {
            puts(token);
            ptr = NULL; /* ptr = « chaine » la première fois, NULL les suivantes. */
        }
     
        free (chaine);
        return 0;
    }
     
    Paix
    sur
    la
    terre
    aux
    hommes
    de
    bonne
    volonté

    bonjour bonjour,

    Merci pour ta solution , elle est largement plus optimisée que la mienne. Avec ce code et les conseils de Franck. H normalement ça va aller tout seul.

    ps :Merci, je n'avais pas fais attention pour tampon !!

  11. #11
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Je rappelle que strtok est déconseillé par la page man de strtok !

    Avoid using these functions. If you do use them, note that:

    These functions modify their first argument.

    These functions cannot be used on constant strings.

    The identity of the delimiting character is lost.

    The strtok() function uses a static buffer while parsing, so it’s not thread safe. Use strtok_r() if this matters to you.
    Ce n'est pas une fonction à prendre à la légére...
    Jc

  12. #12
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Oui un avertissement en plus ne coute rien, il faut vraiment savoir ce qu'on fait quand on l'utilise !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 48
    Par défaut
    Citation Envoyé par fearyourself Voir le message
    Je rappelle que strtok est déconseillé par la page man de strtok ! Ce n'est pas une fonction à prendre à la légére...
    Jc
    Bonjour,

    Merci pour cette précision. Dans mon cas, je vais seulement l'utiliser pour isoler chaque mot d'une ligne du fichier et ensuite je créer des listes.

  14. #14
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Il_TiRaNNo Voir le message
    Bonjour,

    Merci pour cette précision. Dans mon cas, je vais seulement l'utiliser pour isoler chaque mot d'une ligne du fichier et ensuite je créer des listes.
    Cela n'empêche que c'est une fonction dangereuse et source de problèmes. A utiliser avec grande modération.

    Personnellement, je ne m'en sers jamais.

    Jc

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

Discussions similaires

  1. Compter les mots d'une phrase
    Par miss64 dans le forum Langage
    Réponses: 12
    Dernier message: 07/01/2017, 11h57
  2. copié une phrase dans un fichier texte
    Par Antho87 dans le forum VBScript
    Réponses: 6
    Dernier message: 12/02/2010, 21h50
  3. Ajouter mot devant une ligne d'un fichier texte
    Par AZzjeioafh dans le forum VBScript
    Réponses: 0
    Dernier message: 18/09/2009, 21h39
  4. Ecriture d'une phrase dans un fichier texte
    Par pghm77 dans le forum C
    Réponses: 11
    Dernier message: 09/06/2008, 09h48
  5. Rechercher un mot ou une phrase dans un fichier
    Par cellendhyll dans le forum Général Python
    Réponses: 3
    Dernier message: 12/06/2007, 12h52

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