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

SL & STL C++ Discussion :

std::istringstream


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut std::istringstream
    Bonjour,

    soit le code (merci la faq) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	std::string StrFrame = &m_Frame[7]; // skip the header
    	std::vector<std::string> StrTokens;
     
       // Fill the vector with the token 
    	std::istringstream Iss( StrFrame );
    	std::copy(	std::istream_iterator<string>( Iss ),
    					std::istream_iterator<string>(),
    					std::back_inserter( StrTokens ) );
    Comment spécifier le séparateur ? par défaut c'est un espace mais dans mon cas, il faudrait que ce soit une virgule...
    Merci.

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 36
    Par défaut
    d'apres ce que je voit la :
    http://www.sgi.com/tech/stl/istream_iterator.html

    Je dirais que tu ne peux pas.
    peut etre en utilisant une classe perso a la place de la string et qui aurais son propre operator>>

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je ne pense pas qu'on puisse modifier les séparateurs pris en compte par l'opérateur >>. Ou alors peut-être avec une bidouille assez tordue.

    Tu peux simplement utiliser une boucle et getline pour extraire tes mots.

  4. #4
    Membre confirmé
    Inscrit en
    Janvier 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 36
    Par défaut
    sinon ecrire un istream iterator "perso" qui fasse le boulot .... c'est quasi trivial

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Avoir une fonction split sous la main peut aussi être une bonne idée.

  6. #6
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    finalement, j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	std::string StrFrame = &m_Frame[7]; // skip the header
     
    	for (int i=0; i<StrFrame.length(); i++)
    		if ( StrFrame[i] == ',' )
    			StrFrame[i] = ' ';
     
    	std::istringstream Iss( StrFrame );
    	std::vector<std::string> StrTokens;
    	std::copy(	std::istream_iterator<std::string>( Iss ),
    					std::istream_iterator<std::string>(),
    					std::back_inserter( StrTokens ) );
    Je remplace les virgules de ma chaîne par des espaces, et puis c'est tout.
    Mais, c'est dommage que l'on ne puisse pas spécifier le séparateur...
    Merci pour votre aide.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Dans ce cas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::replace(StrFrame.begin(), StrFrame.end(), ',', ' ');

  8. #8
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    C'est typiquement le boulot de boost:tokenizer qui, je soupçonne, sera plus efficace que les stringstream.

    Sinon, vous êtres sûrs que l'on ne peut pas spécifier les blancs utilisés pour séparer des mots via les facets ? J'ai souvenir d'une possibilité, mais je ne sais plus où je l'avais vue. Autrement, il reste la possibilité d'utiliser des buffers filtrants qui transformeraient les signes qui doivent être considérés comme signes de séparation en espaces. Mais, bon. Il est des enclumes plus aérodynamiques -- pour ce qu'il y a à faire ici.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  9. #9
    Membre expérimenté
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par défaut
    Je sais pas si je réponds à la question, mais j'ai beaucoup chipoté avec les stream, les strings, etc aujourd'hui, et il me semble que ceci fait l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      string str= "foo\nbar";
      istringstream iss(str);
      string line;
      while (getline(iss, line, '\n'))
      {
        cout << line << endl;
      }

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca marche tout aussi bien oui (enfin avec un ',' comme délimiteur, pour vraiment répondre à la question ).

  11. #11
    tut
    tut est déconnecté
    Membre éclairé
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Par défaut
    ok, merci.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/02/2014, 11h01
  2. probleme std::istringstream - espaces
    Par samball dans le forum SL & STL
    Réponses: 5
    Dernier message: 21/02/2007, 00h58
  3. conversion std::string en std::istringstream
    Par flipper203 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/07/2006, 18h34
  4. std MFC
    Par philippe V dans le forum MFC
    Réponses: 7
    Dernier message: 17/01/2004, 00h54
  5. STL : std::set problème avec insert ...
    Par Big K. dans le forum MFC
    Réponses: 13
    Dernier message: 08/11/2003, 01h02

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