Cstringconvert (manipulation des cstring)

Soyez le premier à donner votre avis sur cette source.

Vue 8 034 fois - Téléchargée 153 fois

Description

Ca sert a faire des manips sur les CString (conversion, extraction entre des bornes...)
Dsl pour l'utilisation "abusive" de vector mais c'est l'habitude et j'ai pas le temps de faire mieux pour l'instant

A oui un petit exemple pour l'utiliser (j'ai pas geré la mémoire ds cet ex) :

CString str;
CStringConv strConv(&str);

//
CString strTest = strConv.ConvertToString(1223.2563, 2);
strTest = strConv.ConvertToString(12369);
//

//
str = "yoann; test; samsung;ogg;";
std::vector<CString> vectString = strConv.ExtractInChaine(";");
for (int i = 0; i <vectString.size();i++)
AfxMessageBox(vectString[i]);
//

//
char * psztest = strConv.ConvertToChar();
BYTE * pByteList = strConv.ConvertToByteList();
//

//
str = "test de extract Num du int 123, et de float 9856.3219 -999.678";
std::vector<float> vectFloat = strConv.ExtractNumber();
for (int j = 0; j <vectFloat.size();j++)
AfxMessageBox(strConv.ConvertToString(vectFloat[j],4));
//

//
str = "[T] Tag 1 /T On ne doit pas voir [T] Tag 2 /T Non Plus [T] Tag 3 /T";
std::vector<CString> vectStr = strConv.ExtractBetweenTag("[T] ","/T");
for (int k = 0; k <vectFloat.size();k++)
AfxMessageBox(vectStr[k]);
//


//
BYTE * byte = new BYTE[12];
char * carac = new char[12];
for (int l = 0; l< 12; l++)
carac[l] = byte[l] = 'p';

CString strTest1 = strConv.ConvertToString(byte,12);
AfxMessageBox(strTest1);

strTest1 = strConv.ConvertToString(carac,12);
AfxMessageBox(strTest1);
//

Source / Exemple :


//Permet de definir sur quelle CString on veut travailler
void SetCStringVar(CString * pstrString);

//Retourne un CString avec la valeur numerique du param
//Le nbr de points apres la virgule est configurable
//Fct statique car elle n'utilisent pas le ptr membre m_pstrString
static CString ConvertToString(int iNum);
static CString ConvertToString(float fNum, int nbCAV = 0);

//Retourne un CString Image du tableau en param
static CString ConvertToString(BYTE * pTabByte, int iTabSize);
static CString ConvertToString(char * pTabChar, int iCharSize);

//Retourne un char * de la chaine en cour
char * ConvertToChar();

//Retourne un champ de bits correspondant a la chaine en cour
BYTE * ConvertToByteList();

//Retourne les caracs entre les indexs start et stop de la chaine en cour
CString ExtractByIndex(int iStart, int iStop);

//Cherche dans la chaine en cour la chaine en param,
//Retourne un tableau d'entier contenant l'index du 1er carac de
//chaque occurence de la chaine en param;
std::vector<int> FindChainePos(CString strChaine);

//Cherche dans la chaine en cour toutes les valeurs entre deux 
//occurence de strSeparateur, retourne un tableau des chaine trouver
//le tableau est vide si rien n'a été trouvé
std::vector<CString> ExtractInChaine(CString strSeparateur);

//Extrait une ou plusieurs chaines entre 2 balises dans la chaine en cour
//Retourne un tableau de CString si il y a plusieurs couple de balises
//chaque case du tableau contient la chaine entre les balises
std::vector<CString> ExtractBetweenTag(CString strOpenTag, CString strCloseTag);

//Cherche dans la chaine en cour tous les chiffres (réél ou entier)
//compris dans les bornes en params
//Retourne un tableau de float remplit avec tous les chiffres trouvés
std::vector<float> ExtractNumber(float fMinVal = -99999999, float fMaxVal = 99999999);

//Réécriture des fct standard mais ou on peut directement
//utiliser des types float ou int sans convertions
void SetIntAt(int iIndex, int iVal);
void SetFloatAt(int iIndex, float fVal, int nbCAV = 1);

Conclusion :


Ya des memory leak dans certaines fonctions (mais c'est marqué ds le code)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Salut,

Quelques remarques sur le nommage de tes methodes:
- ExtractInChaine: Soit tu prends des noms en Francais, soit en Anglais, mais melanger les deux, ce n'est pas tres pratique
- ConvertToChar: Ca convertie en char*, pas en char... Tu devrais trouver un autre nom, encore que comme dit Lucky92, ce n'est pas la fonction la plus utile.

Vu le titre du post, je m'attendais a des conversions vraiment utiles, comme les bstr ou autres unicode et trucs bizares.

Enfin, l'avantage de ce genre de classes, c'est que tu peux toujours rajouter de nouvelles fonctionnalitees :o)

Eric
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Bonsoir,

J'ai quelques remarques :
- tu DOIS te débarrasser de tes memory leaks ! Il y a deux voies : soit le client est en charge de l'allocation et de la désallocation, soit c'est ta classe qui s'en charge.
- la classe CString (MFC) définit l'opérateur de conversion en LPCSTR (alias const char*), ce qui me fait penser que ta méthode ConvertToChar() est un peu lourde, voire inutile.
- je ne connais pas le contexte de ton travail, mais la conversion en BYTE (unsigned char) me semble moins intéressante qu'une compatibilité avec l'unicode (wchar_t).
- je pense que tu gagnerais en portabilité si tu utilisais les classes std::string, std::ostringstream et std::istringstream.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.