Navigation Principale
bullet Accueil
Photos
bullet Articles
bullet Forum
bullet Liens
bullet Membres
bullet News
bullet Proposition de News
bullet Téléchargements
bullet Content Index
 
Bienvenue
Nom d'utilisateur:

Mot de passe:


Retenir l'identification

[ ]
[ ]
En ligne
Invités: 5, Membres: 0 ...

Record: 51
(Membres: 0, Invités: 51) le 02 avr : 02:42

Membres: 145
Dernier membre: danync
Ajouts récents
Windows
Delphi
membres
11 nov winston
19 jui danync
18 jun c-lotre
06 mar volvic
16 fév snah
Forum
Page de Liens
Comparer une chaine a une autre avec wildcard '*' or '?'
le jeudi 13 septembre 2007
par admin Contributions de l'auteur
dans Delphi > Delphi Général > Delphi Texte

//Compare strings with '*' or '?' wildcards
function MatchStrings(source, pattern: String): Boolean;
var
pSource: Array [0..255] of Char;
pPattern: Array [0..255] of Char; function MatchPattern(element, pattern: PChar): Boolean; function IsPatternWild(pattern: PChar): Boolean;
var
t: Integer;
begin
Result := StrScan(pattern,'*') <> nil;
if not Result then Result := StrScan(pattern,'?') <> nil;
end;begin
if 0 = StrComp(pattern,'*') then
Result := True
else if (element^ = Chr(0)) and (pattern^ <> Chr(0)) then
Result := False
else if element^ = Chr(0) then
Result := True
else begin
case pattern^ of
'*': if MatchPattern(element,@pattern[1]) then
Result := True
else
Result := MatchPattern(@element[1],pattern);
'?': Result := MatchPattern(@element[1],@pattern[1]);
else
if element^ = pattern^ then
Result := MatchPattern(@element[1],@pattern[1])
else
Result := False;
end;
end;
end;
begin
StrPCopy(pSource,source);
StrPCopy(pPattern,pattern);
Result := MatchPattern(pSource,pPattern);
end; Exemple : on utilise un composant ShellListView1 et un composant ShellTreeView1 et un bouton
Quand on clique sur le bouton, on peut taper le filtre de son choix (*.txt, img*.jpg, i??ge.*) et la liste ne selectionnera que les fichiers qui correspondent au masque de recherche . (Ne pas oublier de mettre la proprié´© multiselect à ´rue)
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ShellCtrls;type
TForm1 = class(TForm)
ShellListView1: TShellListView;
ShellTreeView1: TShellTreeView;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ D飬arations priv饳 }
public
{ D飬arations publiques }
end; var
Form1: TForm1; implementation {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var tmp, FileName : string;
i : integer;
begin
tmp:='*.*';
if not inputquery('Files select','Type of file Ex : *.txt',tmp) or (tmp='') then exit;
begin
for i:=0 to ShellListView1.Items.Count-1 do
begin
FileName:=ShellListView1.Folders[i].PathName;
ShellListView1.Items[i].Selected:=MatchStrings(FileName,tmp);
end;
end;
end;
On peut é§¡lement utiliser une fonction delphi qui fait partie de l'unité asks function MatchesMask(const StringToMatch, Mask: string): Boolean; description
Renvoie True si la chaine correspond au parametres de la chaine de format (le masque).Les caract貥s g鮩riques sont l'ast鲩sque (*)et le point d'interrogation (?).
Un ast鲩sque correspond à µn nombre quelconque de caractè²¥s.
Un point d'interrogation correspond à µn caractè²¥ arbitraire unique. L'aide de Delphi sp飩fie clairement que cette fonction ne gè²¥ pas seulement les noms de fichier.
On peut donc l'utiliser sur des textes. La fonction genere une exception si le masque est syntaxiquement invalide. exampleconst s = 'http://technojoly.toto.com'; MatchesMask(s,'h?p://*') == FALSE
MatchesMask(s,'h??p://*') == TRUE
MatchesMask(s,'http://*') == TRUE
MatchesMask(s,'http://*.com') == TRUE
MatchesMask(s,'http://*.net') == FALSE
MatchesMask(s,'*.toto.com') == TRUE
MatchesMask(s,'toto.com*') == FALSE
Compteur
Cette page aujourd'hui ...
total: 0
unique: 0

Depuis toujours ...
total: 1159
unique: 716

Site ...
total: 6433
unique: 2532

Recherche TechnoJoly
Sélectionner la langue


Titres

»Sortie différée de Google Chrome OS
Bien que l'annonce de la sortie de Chrome O ...
»Organisation de la seconde édition de l'European OpenSource & Free Software Law Event (EOLE) le 9 décembre 2009 au Parlement Européen
L'European OpenSource & Free Software Law Event (EOLE) est un événement qui a pour ambition de favo ...
»Fedora 12 « Constantine » est disponible
Après les phases alpha et bêta, la version finale de la Fedora 12 (Constantine de son petit ...
»Codec OpenSource BroadVoice
Le codec G729 est un standard recommandé par
»Sortie de la version 2.11 de la bibliothèque standard C GNU (glibc)
La version 2.11 de la bibliothèque C GNU (RSS ...
»Firefox, Google, Samsung, X
Firefox : 5 ans et une version pré-3.6

Firefox a 5 ans, et ça se fête par la pu ...
»La gestion des bénévoles facilitée avec OpenVolunteer (v0.2)
Dix mois après la première version, OpenVolunteer vient de sortir en version 0.2. Pour rappel, Open ...
»MimOOo ou « la plus grosse migration OpenOffice.org au monde » en questions
En septembre 2006, DLFP publiait une dépêche intitulée « La plus grosse migration
»Le Libre au service de l'agriculture du Nicaragua
On ne peut que se féliciter lorsque le Logiciel Libre est au service du développement d'un pays du ...
»Le Top 500 de novembre 2009
Le trente-quatrième Top 500 des supercalculateurs mondiaux est sorti aujourd'hui à l'occasion de la ...
»Revue de presse de l'April pour la semaine 46
La revue de presse de l'April est régulièrement ...
»Open Graphics lance la production de l'OGD1
La carte de développement du projet Open Graphics, OGD1, est en cours de fabrication. Les circuits ...
»Soirée Linux et Logiciels Libres sur Sisteron (04)
Nouvelle soirée Linux et Logiciels Libres sur Sisteron organisée par All trademarks are © their respective owners.
TechnoJoly.net n'assume pas la responsabilité
du contenu des sites extérieurs
  
Render time: 0.3364 second(s); 0.0603 of that for queries.