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

C++Builder Discussion :

TStringGrid : récuperer entre les séparateurs


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut TStringGrid : récuperer entre les séparateurs
    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?

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Oui, en découpant ta chaine de caractère...
    Regarde du coté des fonctions Pos et SubString

  3. #3
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    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 ) ;

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    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)
    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))
    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)
    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

  5. #5
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    tu peux utiliser DelimitedText de TStringList
    la Fonction ExtractsStrings
    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...
    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) );
    }
    Qui s'utilise:
    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

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    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

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 265
    Par défaut
    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 )

    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);
    }
    ç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 ...
    et je sais pas trop comment faire tout ça par contre ....

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    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

Discussions similaires

  1. [AC-2003] Récuperer la relation entres les tables
    Par walker34 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 30/07/2009, 10h05
  2. Réponses: 67
    Dernier message: 16/12/2007, 13h41
  3. Réponses: 29
    Dernier message: 09/08/2007, 15h39
  4. Benchmark entre les langages
    Par El blérot dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 27/12/2002, 01h22
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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