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 chaine caractere


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut recherche chaine caractere
    bonsoir a tous,
    voila je voudrais extraire d'un fichier texte une chaine de caractère, mais je n'y arrive pas.
    Je ne connais pas les outils mis a ma disposition, (noob in side désolé^^).
    pour faire simple (dans un premier temps), il me faut extraire un liste de personne : voila le texte :
    CT_RaidTracker_Online = {
    ["Malbish"] = 1,
    ["Crystalshiva"] = 1,
    ["Luciole"] = 1,
    ["Oloniss"] = 1,
    ["Shinia"] = 1,
    ["Makaria"] = 1,
    ["Sholwen"] = 1,
    ["Andora"] = 1,
    ["Houbyone"] = 1,
    }
    Le souscis que je vois c'est que ma balise serait [", pdes symboles de code .
    je nage completement :-(, merci de me rediriger vers un topic, ou forum si cela a deja eté traité (surement même, mais pas trouvé).

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 16
    Points : 18
    Points
    18
    Par défaut
    Une utilisation de fscanf serait tout indiquée...

    comme suit:
    char nom[maxSize];
    fscanf("[\"%s\"]", nom);

    le \ précédent le " indique au compileur de ne pas interpréter le caractère suivant comme étant du code

  3. #3
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int fscanf(FILE *stream, const char *format, ...);
    fscanf permet d'extraire une chaine d'un FILE*, et de la decouper comme on veut.

    Il faut donc dans un premier temps ouvrir le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *fopen(const char *path, const char *mode);
    Comme ceci par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #include <stdio.h>
     
    FILE  *mon_fichier;
     
    mon_fichier = fopen("./file.txt", "r");
    Puis ensuite recuperer les lignes comme indique au dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int     num;
    char    nom[MAX_SIZE];
     
    fscanf(mon_fichier, "[\"%s\"] = %d\n", nom, num);
    Ca devrait marcher.

    Attention ! Il faut etre sur du format du fichier.
    Le plus simple reste de tester la valeur de retour de fscanf() pour s'assurer que tout s'est bien passe.

    Et il faut aussi faire attention a la taille des noms pour ne pas depasser MAX_SIZE - 1.

  4. #4
    Christianchristian
    Invité(e)
    Par défaut
    Bonjour,

    Comme je n'ai pas très bien compris l'origine des noms que tu as à extraire ni la manière dont tu les récupères dans ton programme, j'ai considéré, pour pouvoir faire mes tests, une chaine de caractère contenant l'ensemble des noms et des caractères parasites (CT_RaidTracker_Online).

    char CT_RaidTracker_Online [] =
    "['Malbish'] = 1,"
    "['Crystalshiva'] = 1,"
    "['Luciole'] = 1,"
    "['Oloniss'] = 1,"
    "['Shinia'] = 1,"
    "['Makaria'] = 1,"
    "['Sholwen'] = 1,"
    "['Andora'] = 1,"
    "['Houbyone'] = 1,";
    char *NEXT ;
    char *string_interm ;
    char *nom_a_extraire ;
    char sep [] = "['";

    nom_a_extraire = strtok_s (CT_RaidTracker_Online, sep, &NEXT);
    cout <<"1er nom à extraire : "<<nom_a_extraire<<"\n";
    strcpy_s (sep, "'");

    for (int k = 1; k < 9; k++) // 9 : la borne de la boucle for est à adapter
    {
    string_interm = strtok_s (NULL, sep, &NEXT);
    nom_a_extraire = strtok_s (NULL, sep, &NEXT);
    cout <<k + 1<<"eme nom à extraire : "<<nom_a_extraire<<"\n";
    }
    ___________________________________________________________
    Résultats :

    1er nom à extraire : Malbish
    2eme nom à extraire : Crystalshiva
    3eme nom à extraire : Luciole
    4eme nom à extraire : Oloniss
    5eme nom à extraire : Shinia
    6eme nom à extraire : Makaria
    7eme nom à extraire : Sholwen
    8eme nom à extraire : Andora
    9eme nom à extraire : Houbyone


    Il y a peut-être plus élégant .... Je ne suis pas spécialiste en C.

    Maintenant je vais aller me coucher !

    Je m'aperçois que pendant que je m'occupais de ce problème d'autres messages sont arrivés. La solution qu'ils proposent est effectivement plus élégante.



    Cordialement,
    Dernière modification par Christianchristian ; 09/06/2006 à 04h41.

  5. #5
    Expert éminent sénior

    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 : 44
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nom_a_extraire = strtok_s (CT_RaidTracker_Online, sep, &NEXT);
    Fonction à éviter si on le peut et je ne connais pas le strtok_s mais strtok_r...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cout <<"1er  nom à extraire :  "<<nom_a_extraire<<"\n";
    cout?? Dans un forum C!!! Je ne regarde pas plus loin

    Jc

  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 Christianchristian
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout <<"1er  nom à extraire :
    Pas du C...

  7. #7
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    363
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 363
    Points : 353
    Points
    353
    Par défaut
    Ne connaissant pas non plus strtok, je pense qu'il faudrai d'abord faire une fgets pour eviter l'overflow et ensuite un sscanf pour extraire le nom et le numero au passage.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci beaucoup pour les reponses.
    Mais comme souvent il y a un hic!
    en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(mon_fichier, "[\"%s\"] = %d\n", nom, num);
    cela me retourne 0 dans nom, j'avais deja essayer ça en faite, mais le symbole "[" ou " fout le bazard meme précédé de \. donc en faite toujours au même point.

  9. #9
    Christianchristian
    Invité(e)
    Par défaut
    Sincèrement désolé pour toi Guitou38, c'était seulement pour aider ! enfin essayer.


    Citation Envoyé par fearyourself
    cout?? Dans un forum C!!! Je ne regarde pas plus loin
    Jc
    Citation Envoyé par Christianchristian
    Il y a peut-être plus élégant .... Je ne suis pas spécialiste en C.
    Maintenant je vais retourner me coucher !

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Christianchristian
    Sincèrement désolé pour toi Guitou38, c'était seulement pour aider ! enfin essayer.






    Maintenant je vais retourner me coucher !
    merci bien, pas de soucis pour moi et bonne nuit!

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    petit up, et en plus je voudrais savoir comment je pourrais faire pour n'avoir dans ma chaine que des lettres ( pas de } ]..., qui sont considérés commes des caractères).
    Pour un scanf, il y a bien quelque chose du type : %[a-zA-Z] mais je n'utilise pas de scanf.

  12. #12
    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 guitou38
    petit up, et en plus je voudrais savoir comment je pourrais faire pour n'avoir dans ma chaine que des lettres ( pas de } ]..., qui sont considérés commes des caractères).
    Pour un scanf, il y a bien quelque chose du type : %[a-zA-Z] mais je n'utilise pas de scanf.
    fgets(), nettoyage, puis test avec strpbrk() (<string.h>)...

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    oui je veux bien mettoyer mais comment?
    Existe t'il une fonction ou faut il la créer?

  14. #14
    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 guitou38
    oui je veux bien mettoyer mais comment?
    Existe t'il une fonction ou faut il la créer?
    Il faut la créer.

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    Fait de ton mieux et poste ton code si tu as un problème.

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    voila ce que j'ai trouvé pour nettoyer, tres puissant en faite!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          sscanf(texte1,"%*[^a-zA-Z]%[a-zA-Z]s",texte2);

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    me voilou de retour, maintenant j'ai un soucis pour accepter dans mon filtre les accents (é è à...), comment faire?

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

Discussions similaires

  1. [MySQL] recherche chaine caractere
    Par omelhor dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/11/2010, 20h10
  2. recherche chaine caractere
    Par omelhor dans le forum Requêtes
    Réponses: 5
    Dernier message: 09/07/2010, 17h05
  3. recherche chaine de caractere ne marche pas !!
    Par lobiman dans le forum Langage
    Réponses: 1
    Dernier message: 24/08/2006, 11h55
  4. Réponses: 4
    Dernier message: 05/06/2006, 12h43
  5. Recherche chaine de caractere
    Par fantomchris dans le forum C
    Réponses: 11
    Dernier message: 08/01/2006, 15h52

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