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

Langage Delphi Discussion :

Suppression conditionnelle d'une chaîne de caractères dans un TList


Sujet :

Langage Delphi

  1. #1
    Membre éprouvé
    Avatar de Aooka
    Homme Profil pro
    Scripting Powershell & Wlangage
    Inscrit en
    Juillet 2015
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Scripting Powershell & Wlangage

    Informations forums :
    Inscription : Juillet 2015
    Messages : 227
    Points : 1 095
    Points
    1 095
    Par défaut Suppression conditionnelle d'une chaîne de caractères dans un TList
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          for J := 1 to L_PanelListeF.Count - 1 do
          Begin
            K := 1;
            if L_PanelListeF.Items[K].LBL_vF.Text = sNom then
            Begin
              L_PanelListeF.Remove(L_PanelListeF.Items[J]);
              PanelListeF.DisposeOf;
              Next;
            End;
            K := K + 1;
          End;
    Code changé : (mais ne marche pas.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    J := 0;
          for PanelListeF In L_PanelListeF Do
          Begin
            if ((PanelListeF In L_PanelListeF) And (L_PanelListeF.Items[J].LBL_vF.Text = PanelListeF.LBL_vF.Text)) then
            Begin
              PanelListeF.DisposeOf;
              Next;
            End
            Else
            Begin
              L_PanelListeF.Add(PanelListeF)
            End;
    J := J + 1;
          End;
    Bonjour, j'ajoute des Strings dans une Liste de type TList<PanelPersonnalisé> (PannelPersonnalisé.sNom = String qui vient d'être ajouté). Je souhaiterais supprimer la String seulement si elle existe déjà dans ma liste pour évite des doublons, triplons, et ainsi de suite.

    J'espère être clair dans ma demande.

    Merci d'avance,
    Bonne journée,
    M.

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 452
    Points : 24 863
    Points
    24 863
    Par défaut
    Je n'ai essayé tes codes mais cela m'étonne que tu nous indique pas si tu as une exception comme IndexOutOfBounds, ce qui m'étonne

    Lorsque tu supprimes un élément, cela réduit la liste, c'est un risque de dépassement
    Je suppose que ton K servait à cela mais tu as mal placé son initialisation
    D'ailleurs, tu ne sembles pas savoir que les listes commence à 0 et non à 1

    En partant de la fin, tu supprimes l'élément en cours, et comme la boucle diminue, tu n'a plus ce problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for I := List.Count - 1 downto 0 do
    begin
      if List.Value = ValueToDelete then
        List.Delete(I);
    end;

    DisposeOf? c'est pour un développement FMX Mobile ???
    Utilise Free si c'est du VCL Windows

    Tu peux aussi utiliser une TStringList avec Objects[] contenant tes panels, voir l'option OwnObjects pour faciliter la libération
    tu peux utiliser Sorted et Duplicates dupError et contrôler via IndexOf avant d'insérer (pour gérer une libération d'un objet créé que l'on ne peut pas ajouter car en doublon)
    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

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

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. Rechercher une chaîne de caractère dans une série de fichier
    Par Edoxituz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/02/2006, 12h51
  3. Réponses: 7
    Dernier message: 14/12/2005, 09h53
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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