Valentintinmar
Messages postés15Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention21 août 2009
-
15 juil. 2009 à 16:43
Valentintinmar
Messages postés15Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention21 août 2009
-
19 août 2009 à 17:04
Bonjour à tous,
Après plusieurs heures à eccumer le net en recherche d'indices, j'en viens à vous exposer mon problème dans l'espoir de quelques lumières quand à mes souçis :
Je code dans environement Visual C++ ( j'espère ne pas m'être trompé de thème )
Voici mon problème : Je récupère des données dans un CString Array, puis je parcoure ce vecteur pour recopier les valeurs dans un .CSV
En clair, j'ai un CStringArray de la forme :
(1) 65
(2) 66
(3) 67
Qui est transformé en un :
CString strValue="65;66;67" alors que j'aimerai avoir strValue="A;B;C"
Il est important que la solution sois sous une forme CString.
Voilà un extrait du code concernant mon problème.
-----------------------------------------------------
CString strValue;
CStringArray strArValue;
VARIANTToStr(pAppItem->GetValue(),strArValue);
//place les données dans le vecteur
for (int i=0; i<strArValue.GetSize(); i++)
{
strValue+=strArValue[i]; //passage à ploblème.
if(i<strArValue.GetSize()-1)
{strValue+=";";}
}
-----------------------------------------------------
J'ai essayé diverse solution comme passer mon CString en int via atoi pour revenir en char sans succès.
Je vous remercie par avance de l'attention que vous voudrez bien porter à ma requette.
cs_alfred2009
Messages postés6Date d'inscriptionsamedi 18 juillet 2009StatutMembreDernière intervention28 juillet 2009 18 juil. 2009 à 18:38
L'erreur C2664 rencontrée plus haut semble indiquer que tu travailles en Unicode.
En Visual C, tu peux le vérifier par l'ajout de :
#ifdef UNICODE
#pragma message ("unicode")
#endif
"unicode" s'affichera si cela est bien le cas dans la fenêtre de résultat de la compilation.
En utilisant les macros de tchar.h, qui permettent d'avoir des sources identiques pour des projets en Unicode ou en ANSI chez MS, j'ai repris un peu ton code, qui renvoit "A;B;C" dans les 2 cas :
CString strValue;
CStringArray strArValue;
strArValue.Add( _T("65") );
strArValue.Add( _T("66") );
strArValue.Add( _T("67") );
for (int i=0; i<strArValue.GetSize(); i++)
{
strValue += static_cast<TCHAR>( _ttoi(strArValue[i]) );
if(i<strArValue.GetSize()-1)
{
strValue+=";";
}
}
_tprintf( _T("%s\n"), strValue );
En ANSI, _ttoi correspond au atoi, TCHAR à char.
le cast en TCHAR force la résolution d'opérateur à += (TCHAR) de la classe CString, ce qui converti l'entier en son caractère Ascii équivalent.
Après la boucle, les caractères contenus dans strValue sont soient codés sur 1 octet (cas ANSI), soient sur 2 octets poids fort à 0 dans cet exemple (cas Unicode).
Valentintinmar
Messages postés15Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention21 août 2009 16 juil. 2009 à 17:07
Rejeté ^^"
J'obtiens l'erreur suivante :
error C2039: 'Getbuffer' : n'est pas membre de 'ATL::CStringT'
with
[
BaseType=wchar_t,
StringTraits=StrTraitMFC_DLL<wchar_t>
]
J'ai essayé la plupart des solutions proposées sur le forum sans succès.
Par exemple avec :
int toto = atoi(tmp.GetString());
J'obtiens alors l'erreur :
error C2664: 'atoi' : impossible de convertir le paramètre 1 de 'ATL::CSimpleStringT::PCXSTR' en 'const char *'
with
[
BaseType=wchar_t,
t_bMFCDLL=true
]
Vous n’avez pas trouvé la réponse que vous recherchez ?
Valentintinmar
Messages postés15Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention21 août 2009 17 juil. 2009 à 16:58
Mon problème n'est pas tant pour traduire un CString en const char ( ça j'y arrive ), mais surtout d'interpréter correctement le contenu de mes variables.
Pour pouvoir sauvegarder mes données dans un .csv je transforme déjà mes CString en const char*.
Mon problème c'est que j'inscrit les codes ascii dans ma sauvegarde à la place d'inscrire les caractères ascii et jusqu'à présent je suis incapable d'effectuer cette traduction.
Valentintinmar
Messages postés15Date d'inscriptionjeudi 4 juin 2009StatutMembreDernière intervention21 août 2009 17 juil. 2009 à 17:15
J'ai oublié de précisé que la technique que je pensais utiliser à savoir :
int toto = atoi((char*)LPCTSTR (strArValue[i]))
char titi = (char)toto;
strValue+=titi;
compile de manière correcte mais les résultats sur ma sauvegarde sont abhérants : tout mes caractères ont la même valeur ou mon executable plante selon la technique de conversion utilisée.