Bjr,
Dans la cellule d'un TStringGrid j'ai par exemple nuage,soleil,pluton
Est ce qu'il existe un moyen de récupérer uniquement ce qu'il y a entre les virgules?
Bjr,
Dans la cellule d'un TStringGrid j'ai par exemple nuage,soleil,pluton
Est ce qu'il existe un moyen de récupérer uniquement ce qu'il y a entre les virgules?
Oui, en découpant ta chaine de caractère...
Regarde du coté des fonctions Pos et SubString
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 AnsiString tmp = StringGrid1->Cells[x][y] ;//'nuage,soleil,pluton' int pos1 = tmp.Pos(",") ; //pos1=6 AnsiString end = tmp.SubString(pos1+1, tmp.Length() ); //'soleil,pluton' int pos2 = end.Pos(","); //pos2=7 AnsiString middle = end.SubString(1,pos2-1); // 'soleil' ShowMessage( middle ) ;
tu peux utiliser DelimitedText de TStringList
la Fonction ExtractsStrings
Ou coder ta propre fonction Explode comme le propose sat83
Code XE (bon ça existe au moins depuis Delphi 6)
Edit : je suis développeur Delphi, le TSysCharSet c'est un type ordinal en delphi (un simple entier utilisé en binaire de 1 à 32 octets)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TStrings *Items = new TStringList(); if (ExtractStrings(TSysCharSet() << ',', TSysCharSet(), MaChaine.w_str(), Items))
C'est un Objet en C++, faut-il le libérer explicement ? pas de new donc pas delete, ou est-ce la portée de bloc suffit ?
Je ré-apprends mes bases ... je ne voudrais pas proposer à dekalima un code qui fuit![]()
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Malheureusement ces fonctions n'existe pas sous mon bon vieux BCB5!
Voici une petite fonction qui devrait fonctionner (je ne l'ai pas tester en détail!!!). Elle peut être améliorée/optimisée...
Qui s'utilise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 AnsiString FindSubStringPos( AnsiString aStr, AnsiString aSep, int aPos ) { AnsiString tmp = aStr ; for( int i=1; i<aPos; i++ ) { int pos1 = tmp.Pos(",") ; tmp = tmp.SubString(pos1+1, tmp.Length() ); } int pos2 = tmp.Pos(","); return( tmp.SubString(1,pos2-1) ); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ShowMessage( FindSubStringPos("aaa,bbb,ccc,ddd,", ",", 2) ) ; //bbb ShowMessage( FindSubStringPos("aaa,bbb,ccc,ddd,", ",", 3) ) ; //ccc ShowMessage( FindSubStringPos("aaa,bbb,ccc,ddd,", ",", 4) ) ; //ddd
TStringList.DelimitedText, QuoteChar, Delimiter existe depuis Delphi 4 (du moins, je crois), c'est dingue que BCB5 ne l'ai pas !
C'est des méthodes et propriétés de l'Objet TStringList
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Merci à vous deux pour vos infos...
J'ai pas trop compris ta toute dernière fonction Sat83, faudra que je la re-regarde...
Par contre dans ton premier post, j'ai complété ce que tu as mi pour afficher le debut, milieu(que tu avais fait), et la fin )
ça marche c'est bon, mais le problème que j'ai c'est que ça marche dans ce cas précis si le tmp contient 3 mots ( on a bien un premier, un milieu et un dernier) mais dans mon cas il peut y avoir 2 ou 4 mots ou même un seul ...
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 void __fastcall TForm1::Button5Click(TObject *Sender) { AnsiString tmp = AdvStringGrid1->Cells[5][1] ;//'nuage,soleil,pluton' 1 change int pos1 = tmp.Pos(",") ; //pos1=6 AnsiString end = tmp.SubString(pos1+1, tmp.Length() ); //'soleil,pluton' AnsiString debut = tmp.SubString(0,pos1-1); int pos2 = end.Pos(","); //pos2=7 AnsiString middle = end.SubString(1,pos2-1); // 'soleil' AnsiString fin = end.SubString(pos2+1,tmp.Length()); ShowMessage(debut); ShowMessage( middle ) ; ShowMessage(fin); }
et je sais pas trop comment faire tout ça par contre ....
Si tu un C++Builder récent, utilise TStringList.DelimitedText ou ExtractStrings !
Il est fort possible que la Lib TMS contienne des versions plus performantes![]()
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !![]()
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !
L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs
Partager