Recherche de charactere dans une chaine...

attila69000 Messages postés 8 Date d'inscription samedi 6 mars 2004 Statut Membre Dernière intervention 29 avril 2004 - 29 avril 2004 à 21:13
attila69000 Messages postés 8 Date d'inscription samedi 6 mars 2004 Statut Membre Dernière intervention 29 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?

Merci d'avance.
Cyril

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
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;

May Delphi be with you
0
attila69000 Messages postés 8 Date d'inscription samedi 6 mars 2004 Statut Membre Dernière intervention 29 avril 2004
29 avril 2004 à 22:21
Merci beaucoup, c'est exactement ce que je cherchais...

Bonne continuation, et encore merci pour ton devouement.

Cyril
0
Rejoignez-nous