Moi j'exploiterais plus volontiers les possiblités du type TStringList :
- placer les données de D1 dans une StringListD1 (avec séquence StringListD1 := TStringList.create; StringListD1.Sorted:=true; StringListD1.Duplicates :=dupIgnore; suivie de StringListD1.add(); voir F1 pour plus de détails sur le type TStringList ),
- placer les données de D2 dans une StringListD2 (comme fait pour la D1),
- ensuite on va supprimer dans D1 tout ce que contient D2 et il ne restera dans D1 plus que ce qui manque à D2 et qui existe dans D1 (insn'it?), comme suit par exemple :
1 2 3 4 5 6 7 8 9 10
| procedure TForm1.Elements_De_D2_Manquants_Existants_Dans_D1;
var S : string; indiceDe_S_Dans1 : integer;
begin for i:=0 to StringListD2.count-1 do
begin S:=StringListD2[i];
indiceDe_S_Dans1 := StringListD1.IndexOf(S);
StringListD1.Delete(indiceDe_S_Dans1);
end;
// et puis, pour voir ce qui reste dans D1 et qui manquait à D2 on peut faire par exemple :
memo1.lines.AddStrings(StringListD1);
end; |
... et au lieu de faire une procédure on peut aussi transformer celle-ci en une fonction qui renvoie comme Result la StringListD1 ainsi expurgée du contenu de la D2.
Partager