attila69000
Messages postés8Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention29 avril 2004
-
29 avril 2004 à 21:13
attila69000
Messages postés8Date d'inscriptionsamedi 6 mars 2004StatutMembreDernière intervention29 avril 2004
-
29 avril 2004 à 22:21
Bonjour,
Ayant une liste de string, je recherche un element correspondant a une recherche.
Le seul hic, c'est que la chaine rechercher peut contenir des * ou des ?.
Je cherche a implementer une recherche du meme genre que celle presente dans la plupart des programmes et dans windows (comme to?o.* qui renverra toto.exe toto.bak et toti.exe par exemple !!).
J'ai essaye de le faire en recursif, mais je bloque a chaque fois sur des problemes, et apres maintes recherches, je n'ai pas trouve d'aide.
Avez-vous une solution ou un algo, ou meme une idee de comment je pourrai m'y prendre?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 29 avril 2004 à 21:37
Regarde l'utilisation de la fonction MatchesMask :
function MatchesMask(const Filename, Mask: string): Boolean;
Description :
Appelez MatchesMask pour tester le paramètre Filename à l'aide du paramètre Masque pour décrire les valeurs autorisées. Un masque valide est composé de caractères littéraux, d'ensembles et de caractères génériques.
Le premier paramètre peut simplement être une chaine de caractère (ce qui est d'ailleurs le cas du type TFileName).
Cette fonction accepte les jokers * et ?.
Il suffit donc de parcourir la liste de chaines en comparant chacune d'elles avec le le masque fourni en deuxième paramètre. Voici un exemple d'utilisation avec 2 TlistBox, un TEdit et un TButton sur une fiche :
procedure TForm1.btnSearchClick(Sender: TObject);
var
i: integer;
begin
ListBox2.Clear;
ListBox2.Items.BeginUpdate;
try
with ListBox1 do
for i := 0 to Count - 1 do
if MatchesMask(Items[i], Edit1.Text) then
ListBox2.Items.Append(Items[i]);
finally
ListBox2.Items.EndUpdate;
end;
Label1.Caption := Format('%d valeurs trouvées', [ListBox2.Count]);
end;