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 :

Créer plusieurs sous-chaine à partir d'un string


Sujet :

C++

  1. #1
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut Créer plusieurs sous-chaine à partir d'un string
    Hello les férus,

    Je suis en train de coder un géolocaliseur (pour faire simple) et je reçois mes données de points géographiques dans un seul string qui prend cette forme :
    numéro du point(de 0 à n) ; nom du point ; adresse du point ; numéro de tel (peut être null) ; longitude (en degrés) ; latitude (en degrés)

    ex :
    1;Maison de la Prevention Sante;6 rue Maguelone 340000 Montpellier;0549527451;3,87952263361082;43,6071285339217
    2;Hotel de Ville;1 place Georges Freche 34267 Montpellier;;3,89652239197876;43,5987299452849

    et j'aimerais faire 6 sous chaines avec ces six données. Le problème est que je n'ai pas la moindre idée de comment m'y prendre et internet est assez confus (ou bien juste moi). j'imagine bien qu'il doit exister une fonction du type
    Cut(nom_variable; delimiteur) mais je n'ai rien trouvé. Je demande donc votre aide, pls !!

    Merci,
    ICE

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Ton format est dit "CSV" : https://fr.wikipedia.org/wiki/Comma-separated_values

    Tu peux soit faire le split toi-même, soit trouvé sur le net un code qui fait du CSV pour toi

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2005
    Messages
    1 110
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Points : 937
    Points
    937
    Par défaut
    Comme ça, vite fait, sans vérifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void split(std::vector<std::string> & cont, std::string const & str, char const *csep, size_t cseplen)
    {
    	size_t prev = 0, pos = 0;
    	for (; (pos = str.find_first_of(csep, pos, cseplen)) != str.npos; prev = ++pos)
    		cont.emplace_back(str, prev, pos - prev);
    	cont.emplace_back(str, prev, pos - prev);
    }
    A moderniser pour avoir une définition proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    template<class Tstr, class Tchr, size_t Swz>
    void split(std::vector<Tstr> & cont, Tstr const & s, Tchr const (&os)[Swz])
    Et, pourquoi pas, avoir un container de basic_string_view en sortie.

  5. #5
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut bon voila
    Salut à tous,

    un ami à moi m'a aidé et m'a proposé ce code un peu barbare:
    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
     
    std::string s = "id;nom;adresse;tel;long;lat";
    std::string delimiter = ";";
     
    size_t pos = 0;
    unsigned int token_number = 0;
    std::string token;
    std::string lat, long;
    while ((pos = s.find(delimiter)) != std::string::npos) {
          token = s.substr(0, pos);
        if (token_number == 4){
                long = token;
                s.erase(0, pos + delimiter.length());
                  lat = s;
               break;
          }
          token_number++;
            s.erase(0, pos + delimiter.length());
     
     }
    il marche mais ya mieux à faire. En tout cas je ferme la discussion car j'ai ma réponse !
    En espérant que cela aide un autre !

    Merci,
    ICE

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Wow... c'est vraiment bof en plus de ne pas être sencé compiler : long est un mot-clé et créer une variable avec ce nom n'est pas autorisé.
    M'enfin si ça te convient..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre régulier

    Homme Profil pro
    Ingénieur développement produits
    Inscrit en
    Février 2016
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement produits
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2016
    Messages : 126
    Points : 71
    Points
    71
    Billets dans le blog
    1
    Par défaut
    c'est vrai que j'ai mis le code brut comme il me l'a passé (par mail) mais j'ai fait des modif de nom de variable donc je n'ai pas eu le problème de long et autre

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

Discussions similaires

  1. Extraction d'une sous-chaine à partir d'une chaine principale
    Par gazere dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/06/2007, 04h08
  2. Réponses: 3
    Dernier message: 17/04/2007, 15h58
  3. Réponses: 1
    Dernier message: 06/04/2007, 21h28
  4. créer un objet Document à partir d'un String XML
    Par Tanebisse dans le forum Services Web
    Réponses: 1
    Dernier message: 21/03/2007, 15h03
  5. Réponses: 7
    Dernier message: 27/10/2005, 19h23

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