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 :

matrice d'un TSringList


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut matrice d'un TSringList
    salut tout le monde ,

    je veux allouer une matrice de TStringList , j'ai fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TSringList * **list;
    liste = new TStringList**[10];
    for(int i=0;i;10;i++)list[i]=new TStringList*[10];
    List->Strings[x][y]->Add("blabla);
    Error: Poi,ter to structure required on left side of -> or ->*.

    besoind de votre aide
    merci d'avance

  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
    Whaou, ca en fait des pointeurs!

    Que souhaite tu faire exactement?

    Si tu veux simplement avoir une liste de TStringList, tu peux utiliser par exemple TObjectList (qui peut contenir n'importe quel objet, donc des TStringList).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //création du TObjectList  
      TObjectList *list = new TObjectList(true);
    //création de 10 TStringList et on les ajoute dans la liste
      for( int i=0; i<10; i++)
      {
        //on alloue la mémoire pour unTStringList
        TStringList *tmp = new TStringList() ;
        //on l'ajoute a la liste
        list->Add( tmp );
      }
    Ensuite pour récupérer une TStringList :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //récupération de la 4ième TStringList :
      TStringList *sl = (TStringList*)list->Items[3] ;
    //utilisation de la TStringList, par exmeple :
      sl->Add( "blablabla" );
    Ne pas oublier a la fin de détruire le TObjectList :
    Ce que je te donne n'est qu'un exemple et une première approche de l'utilisation de TObjectList. Bien évidemment c'est a toi de mettre en place les protection/tests pour éviter les exceptions ou les erreurs.

    .

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    merci satty pour ta réponse,
    ce que je veux vraiment faire c'est de gérer la TStringList comme une matrice où dans chaque case je sauvegarde une suite de mots.
    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Matrice[i][j]->Add("mot1");Matrice[i][j]->Add("mot2");
    matrice[i+1][j]->Add("mot3");..................
    merci d'avance

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    On suppose qu'il existe une liste de StringList !
    Il suffit de déclarer une propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    protected :
     
    void __fastcall SetCells(int ACol, int ARow,  AnsiString Value);
    AnsiString __fastcall GetCells(int ACol, int ARow);
     
    public :
    __property System::AnsiString Cells[int ACol][int ARow] = {read=GetCells, write=SetCells};

    Les méthodes pour Cells :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall zeMachin::SetCells(int ACol, int ARow, AnsiString Value)
    {
    ((TStringList*)List->Items[ARow])->Strings[ACol] = Value;
    }
     
    AnsiString __fastcall zeMachin::GetCells(int ACol, int ARow)
    {
    return ((TStringList*)List->Items[ARow])->Strings[ACol];
    }
    Je ne montre que le mécansime idéal, car il faudra y tester ACol et ARow par rapport aux limites des deux listes !

    Le nom de la classe "zeMachin" peut être celui d'une nouvelle classe.
    Mais on peut aussi envisager que tout ceci appartienne à la form !
    Et dans ce cas là, Cells étant membre de la form :

    Ne pas oublier de libérer les StringList ainsi que la liste !

    A plus !

  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
    Tu peux utiliser ma solution si toutes tes TStringList ont la même taille :

    Par exemple tu veux récupérer le I-ème élément de la J-ième TStringList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      TStringList *sl = (TStringList*)list->Items[J] ;
    // Afficher liste[J][I]
      ShowMessage( sl->Items[I] );
    ou la même chose en plus condensée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage( ((TStringList*)list->Items[J])->Items[I] ) ;


    [EDIT] Pardon, Je me rend compte que ma solution ne convient pas à ton problème. Ma solution propose 2 dimensions de Strings, alors que ce que tu souhaite c'est 2 dimensions de TStringList.

    .

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Par défaut
    merci beaucoup, c'est reglé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. matrices * vecteur
    Par delire8 dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 07/09/2002, 14h15
  2. [CR] entête et pied sur page 1/B de matrice
    Par chloe.j3 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 04/09/2002, 12h07
  3. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44
  4. Gestion de matrice
    Par bzd dans le forum C
    Réponses: 4
    Dernier message: 12/08/2002, 18h19
  5. Comment définir le type matrice ?
    Par charly dans le forum Langage
    Réponses: 7
    Dernier message: 15/06/2002, 21h01

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