Comparaison des caractères génériques DELPHI
Auteur : Li Junyu email : [email protected] ou [email protected] ou [email protected]
Il est reconnu que DELPHI a des fonctions plus puissantes que VB, mais parfois ce n'est pas aussi pratique que VB dans certaines petites choses. Par exemple, il y a SENDKEY() dans VB, qui peut facilement simuler les touches du clavier, mais c'est plus compliqué dans DELPHI. Un autre exemple est qu'il existe LIKE dans VB pour implémenter facilement les caractères génériques. Comparez, mais je ne le trouve pas dans DELPHI. Pour cette raison, lorsque je suis libre et toujours d'humeur, je crée une fonction personnalisée pour réaliser cette fonction, juste au cas où je ne serais pas d'humeur à le faire. encore une si petite chose en cas d'urgence. Programme. Ce genre de petit programme est inutile en rayon. Il vaut mieux le sortir et le laisser émettre de la lumière et de la chaleur.
L'algorithme du programme ajoute d'abord « ? » à la fin de la sous-chaîne. *', puis lisez la sous-chaîne, recherchez les caractères entre les caractères génériques dans la sous-chaîne, c'est-à-dire la sous-chaîne dans la sous-chaîne, puis recherchez dans la chaîne source pour voir si elle contient la sous-chaîne dans la sous-chaîne. est encore très difficile à mettre en œuvre.
function isABClikeAX(abc,ax:string):boolean; //abc est la chaîne source, ax est la sous-chaîne
var
abcstart,axstart,abclength,axlength:entier ;
endpartabc,endpartax,subax:string;
temp,abcwww,axwww:entier;
début // aaa
température :=0 ;
abcstart:=1;
axstart:=1;
axwww:=1;
abcwww:=1;
abclength:=longueur(abc);
longueuraxe:=longueur(hache);
isabclikeax:=true;
tandis que axstart<=axlength fait
début // bbb
si ax[axstart]='?' alors
commencer
inc(débutax);
inc(abcstart);
si abcstart> abclength alors
commencer
isabclikeax:=false;
casser;
fin;
continuer;
fin;
si ax[axstart]='*' alors
commencer
inc(débutax);
température :=1 ;
axwww:=axstart;
abcwww:=abcstart;
continuer;
fin;
sinon (ax[axstart] in ['?','*'] ) alors
début // ccc
endpartax:=copy(ax,axstart,axlength-axstart+1)+'?*';
subax:=copy(endpartax,1,min(pos('?',endpartax),pos('*',endpartax))-1);
axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
endpartabc:=copy(abc,abcstart,abclength-abcstart+1);
si ((pos(subax,endpartabc)<>0) et (temp=1 )) ou ((pos(subax,endpartabc)=1) et (temp=0)) alors
début //jdd
si temp=1 alors temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1) ;
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
fin //jdd
sinon //jdd
début //jdd
si temp=0 alors
commencer
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
température :=1 ;
continuer;
fin;
isabclikeax:=false;
casser;
fin ; //jdd
fin;//ccc
fin;//bbb
fin;//aaa
FONCTION islike(abc,ax:string):boolean;
commencer
islike:=isABClikeAX(abc,ax);
fin;
FONCTION widecard(abc,ax:string):boolean;
commencer
Widecard:=isABClikeAX(abc,ax);
fin;
Faites attention à USES MATH, car MIN() est utilisé, vous pouvez également utiliser l'instruction IF pour remplacer MIN(), mais ce n'est pas assez clair.