Salut,
Je me demande sil ya une proprieté dans les TStringList pour suprimer les duplicas ou bien
ya til un autre compo qui les gere ?
Merci pour toute info
Salut,
Je me demande sil ya une proprieté dans les TStringList pour suprimer les duplicas ou bien
ya til un autre compo qui les gere ?
Merci pour toute info
Pour empêcher l'ajout de duplicats, tu as bien la propriété duplicates combinée avec sorted mais qui empêche en fait l'ajout de doublons :
Tu peux toujours l'exploiter comme ça :
Après si tu veux garder l'ordre initial, il faut savoir si tu veux garder, parmis tes doublons, celui du début ou celui de la fin dans ta liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure SupprimeDoublonsEtTrie(Lignes:TStrings); var asl:TStringList; begin asl:=TStringList.Create; asl.Sorted:=True; asl.Duplicates:=dupIgnore; asl.AddStrings(Lignes); Lignes.Text:=asl.Text; asl.Free; end;
Le mieux c'est de les éviter pour cela tu as deux possibilités :
- Soit tu interdis l'insertion de duplicas avec la propriété Duplicates de ta stringlist. Dans ce cas n'oublie pas de la rendre triée avec la propriété Sorted à TRUE.
- Soit tu recherche si au moins une occurence de ta chaine est présente dans ta stringlist avec indexOf et avant de l'insérée (cas ou indexOf retourne -1).
Sinon tu peux toujours l'implémenter (un exemple rapide mais il y a moyen de faire mieux):
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 procedure SupprimerDuplica(MaChaine : string; var MaListe : TStringList) ; var iFirstPos, iCompteur : integer; begin iFirstPos := MaListe.indexOf(MaChaine); if iFirstPos <> -1 then begin for iCompteur := pred(MaListe.count) to (iFirstPos + 1) do begin if MaListe[iCompteur] = MaChaine then begin MaListe.delete[iCompteur]; end; end; end; end;
Merci,
jai pris la solution suivante c plus rapide je trouve.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 asl.Duplicates:=dupIgnore;
Partager