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

Delphi Discussion :

Question sur TStringList


Sujet :

Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 544
    Par défaut Question sur TStringList
    Bonsoir à tous

    Comment récupérer l'item pointé ?
    Quelle méthode de TStringList ?
    J'ai oublié ...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
    procedure TForm1.Btn_1Click(Sender: TObject);
    Var
      Lst : TStringList;
      i : integer;
     
    begin
     
      Lst := TStringList.Create;
     
      Lst.Add('A');
      Lst.Add('B');
      Lst.Add('C');
      Lst.Add('D');
      Lst.Add('E');
      Lst.Add('F');
      Lst.Add('G');
     
      Lst.Free;
     
      for i := 0 to Lst.Count -1 do
        begin
          // Traiment si l'item 'D' est pointe ?
    // Pas avec Lst.Strings[i] // Là, je peux
    // Je veux savoir comment 
     
        end;
     
    end;
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          A_Text := ExtractFileName(Lst_Rep_Roaming[i]);
          B_SubText := ExtractFileName(Lst_F_A_Chercher.Strings[LEQUEL ?]); 	// J'en vise un que je veux désigner
    Je ne sais pas si je me fais bien comprendre...
    Avec les ListBox, on a un ItemIndex. Pas là...

    Merci.

  2. #2
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chambord
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 193
    Par défaut
    IndexOf() ?

    Sinon, quand je vois ta ligne 20, je ne pense pas que ton code vas fonctionner si tu libérer ta stringlist avant de vouloir l’utiliser…

  3. #3
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 637
    Billets dans le blog
    1
    Par défaut
    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
    var
      Liste: TStringList;
      i: Integer;
    begin
      Liste := TStringList.Create;
      try
        Liste.Add('Pomme');
        Liste.Add('Banane');
        Liste.Add('Cerise');
     
        for i := 0 to Liste.Count - 1 do
          ShowMessage(Liste.Strings[i]); // ou Liste[i]
      finally
        Liste.Free;
      end;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      idx: Integer;
    begin
      idx := Liste.IndexOf('Banane');
      if idx <> -1 then
        ShowMessage(Liste[idx]);
    end;
    On ne peut pas faire confiance à un code qu'on n'a pas entièrement écrit soi‑même, et encore moins à celui qu'on a écrit entièrement. :aie:

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 754
    Par défaut
    Hello,

    Votre confusion est normale. Le TStringList n'a pas d'ItemIndex car c'est un conteneur de données (un Modèle), pas un composant visuel (une Vue) comme le TListBox. L'ItemIndex représente ce que l'utilisateur a sélectionné à l'écran, un concept qui n'existe pas pour une liste de données non visuelle.

    Votre question « comment récupérer l'item pointé » a deux solutions, comme les intervenants l'ont indiqué :

    1. Si « pointer » signifie « accéder à l'item à la position 'i' (l'indice) » : Utilisez simplement la propriété par défaut MaListe[i]. C'est ce que XeGregory a montré. Dans votre boucle for, 'i' est votre « pointeur » actuel.

    2. Si « pointer » signifie « trouver la position de l'item qui contient 'D' (la valeur) » : Utilisez la méthode IndexOf, comme der§en et XeGregory l'ont suggéré. Syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx := Lst.IndexOf('D');
    . Cette méthode renvoie l'indice de l'item, ou -1 s'il n'est pas trouvé. Vous devez donc toujours vérifier le résultat : .
    Enfin, comme l'a très bien vu der§en, vous libérez votre liste (Lst.Free) avant de l'utiliser dans la boucle, ce qui provoquera une erreur. Vous devez libérer la liste à la fin, idéalement dans un bloc try...finally, comme le montre XeGregory.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    544
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 544
    Par défaut
    Bonjour

    Je regarde ça.
    Mais je me suis mal fait comprendre.

    Je donne le retour.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 949
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    La méthode AddObject(const S: string; AObject: TObject) du TStringList permet d'associer à chaque chaîne ajoutée un objet que l'on pourra retrouver ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with MaListe
    do begin
      i := IndexOf('MaChaine');
      if i < 0 then
        MonObjet := nil
      else 
        MonObjet := Objects[i];
    end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 194
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 194
    Par défaut
    Bonjour, Yves,

    Citation Envoyé par tourlourou Voir le message
    ... permet d'associer à chaque chaîne ajoutée un objet que l'on pourra retrouver ainsi : ...
    T'es sûr de ton coup, là ? Moi j'aurais plutôt écrit
    Citation Envoyé par jipété
    ... permet d'associer à chaque chaîne un objet ajouté que l'on pourra retrouver ainsi : ...
    Non ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 754
    Par défaut
    Le terme "associer" n'est pas clair, pour être précis, il faudrait dire :

    La méthode AddObject garantit l'association positionnelle entre une instance de chaîne et un objet, assurant l'intégrité de cette paire logique via son index.

    Il est recommandé d'utiliser TStringList.AddObject uniquement lorsque :
    • Le maintien de l'ordre d'insertion ou la nécessité d'utiliser des fonctionnalités de manipulation de texte intégrées (comme la propriété Text ou le chargement/sauvegarde de fichiers) est primordial.
    • Les chaînes sont garanties uniques (soit parce que le contexte l'impose, soit parce que Sorted = True et Duplicates = dupError ou dupIgnore sont configurés).
    • La taille de la liste est petite et les performances de recherche en O(n) ne sont pas un goulot d'étranglement.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 949
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Non ?
    Non...
    Salut Jean-Pierre !
    Ça permet plutôt d'associer simultanément un objet à une chaîne lors de l'ajout de cette dernière. Avec les réserves de fred1599.
    On peut toujours associer ultérieurement un objet à une chaîne grâce à Objects.
    Après, on peut le voir et l'exprimer différemment, mais c'est ma manière de voir (logique interne buggée ?)
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  10. #10
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 988
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 988
    Par défaut
    Je relis la question et me demande le rapport avec AddObject

    Ces recommandations me laissent aussi perplexe.
    Ce n'est certainement pas la meilleure façon de traiter un texte, cette remarque associe trop étroitement une TStringList à un TMemo.
    Une TStringList peut contenir un gros volume de données mais si la performance de recherche est un critère, on utiliserait plutôt une THashStringList.

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 949
    Billets dans le blog
    6
    Par défaut
    Comment récupérer l'item pointé ?
    Je regarde ça.
    Mais je me suis mal fait comprendre.
    Bonjour,
    Le rapport est là, avec une bonne dose de boule de cristal, au risque du hors-sujet !
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 549
    Par défaut
    Bonjour,

    ben Fred1599 a donné la solution : il n'y a pas d'item pointé pour un TStringList

    A+
    Charly

Discussions similaires

  1. [debutant] Questions sur 1 futur projet
    Par cyrull22 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 28/04/2003, 22h49
  2. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 22h23
  3. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 09h45
  4. Réponses: 2
    Dernier message: 11/08/2002, 22h27
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 17h11

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