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

  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