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

MFC Discussion :

Split de CString


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par défaut Split de CString
    Bonjour,
    je cherche a splitter une chaine de fichier CSV, au format CString, type :

    aaa bbb,ccc,123

    en
    "aaa bbb"
    "ccc"
    "123"

    J'utilise Visual C++ 6, un sscanf ne donne rien, vu qu'il coupe sur les espaces malgre mes efforts pour le faire couper sur les virgules, et je ne trouve pas de fonction 'simple' qui ferait le split.
    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    utilise strtok:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            CString str="aaa bbb,ccc,123";
            char *pWord = strtok((const char *) str, ",");
     
    	while( pWord != NULL )
    	{
                    // Work
                    // ..................
                   TRACE("\nWord:%s",pWord);		
    		// Get Next Token
    		pWord = strtok( NULL, "," );
    	}

  3. #3
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par défaut
    J'obtiens une erreur au castage de (const char *), a priori strtok attend un char*

    Par contre si je mets (char*), c'est le transtypage de CString à char* qui retourne une erreur...

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    re,
    exact:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            CString strOrg="aaa bbb,ccc,123";
    	CString strTemp=strOrg; // pour preserver la string d'origine
    	char *pWord = strtok(strTemp.GetBuffer(0), ",");
    	while( pWord != NULL )
    	{
    		// Work
    		// ..................
    		TRACE("\nWord:%s",pWord);      
    		// Get Next Token
    		pWord = strtok( NULL, "," );
    	} 
    	strTemp.ReleaseBuffer();

  5. #5
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par défaut
    Ca compile
    Encore merci !

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    sinon pour etre complet ,moi je me suis fait une version CString de cette fonction :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    CString CStringTok(const char *szToken,const char *szDelimit)
    {
    	CString strOrg,str;
    	static const char *pszOrg=NULL;
     
    	ASSERT(szDelimit!=NULL);
     
    	if(szToken)	pszOrg=szToken;
    	if(!pszOrg)	return "";
     
    	strOrg=pszOrg;
    	int nPos=strOrg.Find(szDelimit);
    	if(nPos!=-1)
    	{
    		str=strOrg.Left(nPos);
    		pszOrg+=(nPos+strlen(szDelimit));
    	}
    	else
    	{
    		str=strOrg;
    		pszOrg=NULL;
    	}
    	return str;
    }
    //--------------------------------
    	CString strOrg="aaa bbb,ccc,123";
     
    	CString strWord =CStringTok(strOrg,",");
    	while(!strWord.IsEmpty() )
    	{
    		// Work
    		// ..................
    		afxDump <<"\nWord:"<<strWord; 
    		// Get Next Token
    		strWord = CStringTok(NULL,",");
    	}
    voir la faq C++ pour la version STL :
    http://c.developpez.com/faq/cpp/?pag...#STRING_tokens

  7. #7
    Membre averti
    Inscrit en
    Juillet 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 24
    Par défaut
    Tout fonctionne tres bien mais...

    Dans le cas d'un String de ce genre : "aaa,bbb,,ccc"

    J'aimerais recuperer "aaa","bbb","","ccc"

    Hors la chaine vide est ignoree dans la boucle...

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    oki
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    CString CStringTok(const char *szToken,const char *szDelimit,bool &rbEndParse)
    {
       CString strOrg,str;
       static const char *pszOrg=NULL;
     
       ASSERT(szDelimit!=NULL);
     
       if(szToken)
       {
           pszOrg=szToken;
           rbEndParse=false;
       }
       if(!pszOrg)
       {
            rbEndParse=true;
            return "";
       }
     
       strOrg=pszOrg;
       int nPos=strOrg.Find(szDelimit);
       if(nPos!=-1)
       {
          str=strOrg.Left(nPos);
          pszOrg+=(nPos+strlen(szDelimit));
       }
       else
       {
          str=strOrg;
          pszOrg=NULL;      
       }
       return str;
    } 
     
       CString strOrg="aaa,bbb,,ccc";
     
       bool bEndParse;
       CString strWord =CStringTok(strOrg,",",bEndParse);
       while(!bEndParse)
       {
          // Work
          // ..................
          afxDump <<"\nWord:"<<strWord;
          // Get Next Token
          strWord = CStringTok(NULL,",",bEndParse);
       }

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

Discussions similaires

  1. [LG]Split qui marche pas
    Par macluvitch dans le forum Langage
    Réponses: 3
    Dernier message: 30/11/2003, 18h19
  2. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  3. Split et calcul de ligne du tableau
    Par La_picolle dans le forum ASP
    Réponses: 6
    Dernier message: 27/08/2003, 15h58
  4. split en xsl
    Par alexandre54 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/03/2003, 10h08
  5. Convertion de type VARIANT à type CString
    Par j_grue dans le forum MFC
    Réponses: 2
    Dernier message: 07/11/2002, 14h18

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