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 :

parsing de chaine - connaître le type du résultat


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par défaut parsing de chaine - connaître le type du résultat
    Boujours, je recherche un truc tout bete que je n'arrive pas à retrouver :

    j'ai un fichier de ce style :

    azerty 123 456 789 123 456
    qwerty 123 456 789 123 456

    et j'aimerais creer plusieurs chaines contenant les valeurs en chiffre uniquement.

    donc j'ai tout stocké dans un buffer, puis je teste la chaine pour voir ou sont les espaces, mais je ne sais plus comment tester pour savoir si le caractére est un chiffre sans multiplier les IF.

    Merci d'avance de votre aide

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    #include <ctype.h>

    int isdigit(int c);

  3. #3
    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
    Si j'ai bien tout compris dans ce que tu voulais faire !

    Soit une chaine 's_str' contenant une ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "azerty 123 456 789 123 456"
    Tu peux récupérer les données une par une:
    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
     
    char * p_tok = NULL;
     
    /*
     * Ici on recupere le nom ("azrty")
     */
    p_tok = strtok (s_str, " ");
     
    if (p_tok != NULL)
    {
       /*
        * On recupere ici les donnees numeriques une par une
        */
       while (p_tok (NULL, " ") != NULL)
       {
          /*
           * ... Traitement ... par exemple avec isdigit comme cite avant ou mieux, avec strtol.
           */
       }
    }
    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 !

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Franck.H
    /*
    * ... Traitement ... par exemple avec isdigit comme cite avant.
    */
    }
    Dans ce cas, autant utiliser strtol() directement.

  5. #5
    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 DaZumba
    Dans ce cas, autant utiliser strtol() directement.
    Oui biensur
    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 !

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Attention quand même, le strtok plante avec ce genre de chaîne. : char * s_str = "azerty 123 456 789 123 456"; puisque strtok modifie la chaîne initiale et cette chaîne initiale ben elle est dans une zone non modifiable.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  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
    Citation Envoyé par Trap D
    Attention quand même, le strtok plante avec ce genre de chaîne. : char * s_str = "azerty 123 456 789 123 456"; puisque strtok modifie la chaîne initiale et cette chaîne initiale ben elle est dans une zone non modifiable.
    Oui c'est vrai, mais c'etait du vite fait à titre d'exemple étant donné que dans son cas il utilise un buffer donc une zone allouée ou un tableau static

    UP !

    Voilà, je l'ai présenté autrement pour éviter toute confusion mais sans entrer dans des détails
    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 !

Discussions similaires

  1. Probleme de parsing de chaine, tronquer une chaine
    Par Voodo'o_d'ool dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 06/08/2008, 11h28
  2. [D7] connaître un type d'exception et la gérer
    Par _alex_ dans le forum Delphi
    Réponses: 3
    Dernier message: 29/08/2006, 13h41
  3. Connaître le type d'un champs d'une table Mysql
    Par xoran dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/07/2005, 09h29
  4. [POO] Comment connaître le type d'un objet
    Par zizou39 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/03/2005, 09h46
  5. [Access] Connaître le type de donnée
    Par Ric1983 dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/02/2005, 19h09

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