DELPHI-Wildcard-Vergleich
Autor: Li Junyu E-Mail: [email protected] oder [email protected] oder [email protected]
Es ist bekannt, dass DELPHI stärkere Funktionen als VB hat, aber manchmal ist es in einigen kleinen Details nicht so praktisch wie VB. Beispielsweise gibt es in VB SENDKEY(), das Tastaturtasten leicht simulieren kann, in DELPHI ist es jedoch komplizierter Ein weiteres Beispiel ist, dass es in VB LIKE gibt, um Platzhalter einfach zu implementieren Vergleichen Sie, aber ich kann es in DELPHI nicht finden. Aus diesem Grund erstelle ich, wenn ich in einem freien Zustand bin und noch Lust dazu habe, eine benutzerdefinierte Funktion, um diese Funktion zu realisieren, nur für den Fall, dass ich keine Lust dazu habe Im Notfall ist so ein kleines Programm nutzlos. Es ist besser, es herauszunehmen und etwas Licht und Wärme abzugeben.
Der Algorithmus des Programms fügt zunächst „?“ am Ende der Teilzeichenfolge hinzu. *‘, lesen Sie dann die Teilzeichenfolge, suchen Sie nach den Zeichen zwischen den Platzhalterzeichen in der Teilzeichenfolge, d immer noch sehr schwierig umzusetzen.
function isABClikeAX(abc,ax:string):boolean; //abc ist die Quellzeichenfolge, ax ist die Teilzeichenfolge
var
abcstart,axstart,abclength,axlength:integer;
endpartabc,endpartax,subax:string;
temp,abcwww,axwww:integer;
begin//aaa
temp:=0;
abcstart:=1;
axstart:=1;
axwww:=1;
abcwww:=1;
abclength:=length(abc);
Achsenlänge:=Länge(Achse);
isabclikeax:=true;
while axstart<=axlength do
begin//bbb
wenn ax[axstart]='?'
beginnen
inc(axstart);
inc(abcstart);
wenn abcstart> abclength dann
beginnen
isabclikeax:=false;
brechen;
Ende;
weitermachen;
Ende;
wenn ax[axstart]='*' dann
beginnen
inc(axstart);
temp:=1;
axwww:=axstart;
abcwww:=abcstart;
weitermachen;
Ende;
wenn nicht(ax[axstart] in ['?','*'] ), dann
begin//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);
if ((pos(subax,endpartabc)<>0) and (temp=1 )) or ((pos(subax,endpartabc)=1) and (temp=0)) then
begin //ddd
wenn temp=1 dann temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1);
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
Ende //ddd
sonst //ddd
begin //ddd
wenn temp=0 dann
beginnen
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
temp:=1;
weitermachen;
Ende;
isabclikeax:=false;
brechen;
Ende; //ddd
Ende;//ccc
Ende;//bbb
Ende;//aaa
FUNKTION islike(abc,ax:string):boolean;
beginnen
islike:=isABClikeAX(abc,ax);
Ende;
FUNKTION widecard(abc,ax:string):boolean;
beginnen
widecard:=isABClikeAX(abc,ax);
Ende;
Achten Sie auf USES MATH, da MIN() verwendet wird. Sie können MIN() auch durch eine IF-Anweisung ersetzen, dies ist jedoch nicht klar genug.