Suppression des doublons sur une liste

cs_Kyoshin Messages postés 1 Date d'inscription jeudi 25 mars 2004 Statut Membre Dernière intervention 13 juin 2004 - 13 juin 2004 à 19:34
_benjy Messages postés 1575 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 21 février 2011 - 14 juin 2004 à 18:13
Bonjour !

En fait, j'aimerai savoir comment enlever efficacement des doublons sur une liste (composant "List"). Je travaille sur une liste liée à un champ de texte.
Ici, l'originalité est de travailler avec un fichier txt (très pratique car elle peut être remplie par une personne ayant aucune notion en xml, informatique ou autre.

Le fichier txt se présente ainsi :

Recettes.txt

Nom_de_recette1= Crème au citron
&Type1=Dessert
&Recette1=Ingrédient : 4 citrons, ...
&Nom_de_recette2=...

Jusqu'ici, il s'agit d'une liste de varisbles simulant un tableau avec une variable i qui par la suite simulera le 1 de la variable Type1, Nom_de_recette1 et Recette1, puis le 2 de la variable Recette2 etc...

En fait, au démarrage, on charge le fichier txt, et on crée un tableau limité à un nombre max de recettes (100)

SCRIPT 1

mes_recettes=new Array(100);
tmpRecette=new Object();
loadVariables("Bdd/Recettes.txt", "_root");

sur l'image contenant mon composant "List" ayant pour occurence Liste1, j'ai :

SCRIPT 2
_root.Liste1.removeAll();
i = 1;

tmpAuteur = eval("Nom_de_recette"+i);
while(tmpRecette!=undefined){
mes_recettes[i-1] = new Object();
mes_recettes[i-1].id = i;
mes_recettes[i-1].type=eval("Type"+i);
mes_recettes[i-1].nom_de_recette=eval("Nom_de_recette"+i);
mes_recettes[i-1].recette=eval("Recette"+i);
Liste1.addItem(eval("Nom_de_recette"+i), i);
i++;
tmpRecette= eval("Nom_de_recette"+i);
}
Liste1.sortItemsBy("label", "ASC");

Il est à noté que id permet de gérer plus facilement le tableau et les variables. Sur mon "Liste1" (composant List) j'ai mis le script suivant :

SCRIPT 3
on(change) {
for(i=0;i<_root.mes_recettes.length;i++){
if(_root.mes_recettes[i].id==this.selectedItem.data) {
_root.Contenu=_root.mes_recettes[i].Recette;
}
}
}

Ainsi, j'ai donc une liste de Nom_de_recette qui retourne dans la variable "Contenu" la recette en entière. DAns une zone de texte, j'associe la variable Contenu, et le tour est joué.

MON PROBLEME

En fait, j'ai mis mon script 3 sur une 2eme liste ayant pour occurence Liste 2.

Je remplace également :
Liste1.addItem(eval("Nom_de_recette"+i), i);
par
Liste1.addItem(eval("Type"+i), i);

Et pour mon composant "Liste1", je met le script suivant :

on(change) {
_root.Liste2.removeAll();
TmpRecette =this.selectedItem.data;
for(i=0;i<_root.mes_recettes.length;i++){
if(TmpRecette==_root.mes_recettes[i].id){
_root.Liste2.addItem(_root.mes_recettes[i].nom_de_recette, _root.mes_recettes[i].id);
}
}
Liste2.sortItemsBy("label", "ASC")
}

En clair, on a une liste 1 avec un type de cuisine (dessert, entrée, plat principal) qui, amène une seconde liste de recette, qui, sur clic, affiche dans une zone de texte ayant la variable "Contenu" la recette.

Le problème est que j'ai des types redondants. Par exemple, Dessert s'affiche plusieurs fois dans la liste des types de plat. J'aimerai faire un script simple, mais j'ai remarqué que pour deux éléments de ma liste 1 (exemple : "dessert") pour le premier, ma liste2 est vide, et le deuxième non ?

Quelqu'un saurait-il faire une solution simple et pas trop lourde en nombre de lignes ?

1 réponse

_benjy Messages postés 1575 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 21 février 2011 2
14 juin 2004 à 18:13
salut
regarde dans ma source Class MySQL et Class Mail, y'a une Class d'utilitaire, dont une fonction pour eliminer les doublons dans un tableau,
en sachant que les données de ton compossant sont dans un tableau du genre :
nomOccurenceComposant.dataProvider (Array)
donc t'aura juste a faire :
comp.dataProvider = Utils.delDoublons("label",comp.dataProvider);

++
_benjy
0