[Delphi] comparer deux listbox ?

comparer deux listbox ? [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 01-09-2007 à 14:15:37    

Bonjour à tous,
 
j'ai un pb avec un petit bout de prog :  
J'ai deux listbox que je remplis et une en attente d'être remplis ! (la listbox1 contient n éléments, la listbox2 n+1)
Ce que je veux faire c'est mettre dans la troisième listbox l'item de la seconde qui n'est pas dans le première  et je n'y arrive pas du tout !!!
 
Si quelqu'un peut m'aider je l'en remercie d'avance.
 
 
 
 
 

Reply

Marsh Posté le 01-09-2007 à 14:15:37   

Reply

Marsh Posté le 01-09-2007 à 17:29:05    

davidmarli a écrit :

Bonjour à tous,
 
j'ai un pb avec un petit bout de prog :  
J'ai deux listbox que je remplis et une en attente d'être remplis ! (la listbox1 contient n éléments, la listbox2 n+1)
Ce que je veux faire c'est mettre dans la troisième listbox l'item de la seconde qui n'est pas dans le première  et je n'y arrive pas du tout !!!
 
Si quelqu'un peut m'aider je l'en remercie d'avance.
 
 
 
 
 


1/ C'est pas très clair, ou alors c'est moi qui ne m'en remets pas de ce que j'ai fligué cet aprem :D
 
2/ Faudrait passer par un algorythme, mais que contiennent ces ListBox ? Montre-ns, un peu :heink:

Reply

Marsh Posté le 01-09-2007 à 18:06:09    

Dans la listbox n°1 j'ai des noms de fichiers .mpg (par exemple test1.mpg test2.mpg ...)
Dans la listbox2 j'ai aussi des noms de fichiers (par exemple test 1.mpg, test8.mpg, test2.mpg ...)
 
Je sais que la listbox n°2 contient TOUSles fichiers de la listbox n°1 plus un fichier.
 
Ce que je veux c'est trouver ce fichier et le placer dans la listbox n°3 !!!
 
Est-ce plus clair ainsi formulé ?
 
Merci

Reply

Marsh Posté le 02-09-2007 à 13:46:20    

Salut
 
ce que tu peut faire c'est faire une boucle qui parcours tout les items du 2 pour les comparer avec les items du 1 et celui qui n'est pas dans le 2 -> listebox 3
 
c'est un peu lourd mais ça doit marcher
 
je t'aurais bien fait un bout de code mais je sais pas comment on choppe les items :??:
 
si tu sais dis-moi j'te filerai un coup d'main
 
sinon tu recupère tout le texte du 2 dans un string et tu vire un-par-un ceux qui sont dans le 1 avec des POS et des delete :)
 
 
edit: à moins que celui qui n'est pas dans le 1 soit toujours le dernier du 2???


Message édité par Flagad'aware le 02-09-2007 à 13:48:32
Reply

Marsh Posté le 02-09-2007 à 14:00:21    

Merci j'essaierai ce soir.
 
Pour avoir les items c'est :  
 
listbox1.items[i] (pour avoir le ième item de laliste n°1)
 
Et sinon ben non le nouveau fichier ne se trouve pas forcément à la dernière position !!!! C'est bien dommage d'ailleurs !! (Enfin se serait le cas si on pouvait classer les fichiers par date croissante de création . (peut-être est-ce possible avec findfirst ...)  
 
 

Reply

Marsh Posté le 02-09-2007 à 21:12:23    

ça serait trop beau  :D
 
ouais tu peut faire ça:
 

procedure TForm1.Recup;
var  
tmp:string;
i:integer;
 
begin
 
tmp:=listbox2.items.text;
 
for i:=1 to listbox1.items.count do
 begin
  if pos (listbox1.items[i],tmp) >0 then  
   delete(tmp, pos (listbox1.items[i],tmp), length(listbox1.items[i]) );  
 end;
 
//tu peut déja essayer:
showmessage(tmp);
 
//pis si ça roule:
// listbox3.items.add(tmp);
 
end;


 
j'ai pas essayer ça de vrait rouler si les items communs des 2 sont bien pareils :)  
 
par contre tu risque peut être de te retrouver avec des espaces en trop???

Reply

Marsh Posté le 02-09-2007 à 22:48:13    

Bon finalement j'ai utilisé ta première idée : je mets mes éléments de ma listbox1 dans un STRING puis je parse mes items de la seconde avec la fonction POS sur cette chaine, et je repère l'item qui ne s'y trouve pas !
 
Merci bp.

Reply

Marsh Posté le 07-09-2007 à 22:19:18    

Sinon y a la méthode indexof de listbox.items, c'est peut-être plus simple pour voir si une chaîne est dans la liste :D  
Ton truc avec Pos ça va foirer dans le cas où tu cherches "test.mpg" et que la liste contient aussi "untest.mpg" par exemple...

Reply

Marsh Posté le 07-09-2007 à 23:15:54    

aie, you are right
 
beau p'tit bug  [:athlonxp2100+]

Reply

Marsh Posté le 08-09-2007 à 06:39:22    

oui exact mais en fait cela ne peut pas arriver.
En fait dans les listbox sont répertoriés des fichiers issus d'enregistrement avec PouchinTV et ils sont de la forme :  
FRANCE 2 20-55-00 10-02-2007.mpg (par exemple)  
Donc le fichier comportant le nom de la chiane enregistrée, suivi de la date et de l'heure de début normalement un nom de fichier ne peut pas en contenir un autre.
 
Mais bon qd j'aurais cinq minutes je me pencherais sur les indexof.  
 
Merci bp.
 

Reply

Marsh Posté le 08-09-2007 à 06:39:22   

Reply

Marsh Posté le 08-09-2007 à 11:52:33    

un truc du genre devrais fonctionner

Code :
  1. for i := 0 to listbox2.Count - 1 do begin
  2.   str := listbox2.Items[i];
  3.   if (listbox1.indexOf( str ) = -1) then begin
  4.      listbox3.Add( str );
  5.   end;
  6. end;

Reply

Marsh Posté le 05-10-2007 à 11:36:58    

Faudrait surtout avoir le code de remplissage de lbx1 et lbx2, car il doit etre plus facile de remplir aussi lbx3 à la volé que de faire plein de boucle. ;)
 
Apres faut voir le contexte d'utilisation des listbox aussi mais bon...


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed