DELPHI ワイルドカードの比較
著者: Li Junyu 電子メール: [email protected] または [email protected] または [email protected]
DELPHI は VB よりも強力な機能を持っていると認識されていますが、細かい点で VB ほど便利ではない場合があります。たとえば、VB には簡単にキーボードのキーをシミュレートできる SENDKEY() がありますが、DELPHI の方が複雑です。別の例として、VB にはワイルドカードを簡単に実装するための LIKE があります。比較してみましたが、DELPHIには見つかりません。 このため、暇なときに、気分が乗らないときのために、この機能を実現するためのカスタム関数を作成します。このような小さなプログラムは、棚に置いておくと役に立ちません。
プログラムのアルゴリズムは、まず部分文字列の末尾に「?」を追加します。 *' を使用して、部分文字列を読み取り、部分文字列内のワイルドカード文字の間の文字、つまり部分文字列内の部分文字列を検索し、ソース文字列内を検索して、部分文字列内の部分文字列が含まれているかどうかを確認します。実装するのはまだ非常に困難です。
function isABClikeAX(abc,ax:string):boolean; //abc はソース文字列、ax は部分文字列
変数
abcstart、axstart、abclength、axlength:integer;
endpartabc、endpartax、subax:文字列;
一時、abcwww、axwww:整数;
始まります//ああ
温度:=0;
abcスタート:=1;
axstart:=1;
axwww:=1;
abcwww:=1;
abclength:=length(abc);
axlength:=length(ax);
isabclikeax:=true;
axstart<=axlength の間、
始まります//bbb
ax[axstart]='?' の場合
始める
inc(axstart);
inc(abcstart);
if abcstart> abclength then
始める
isabclikeax:=false;
壊す;
終わり;
続く;
終わり;
ax[axstart]='*' の場合
始める
inc(axstart);
温度:=1;
axwww:=axstart;
abcwww:=abcstart;
続く;
終わり;
if not(ax[axstart] in ['?','*'] ) then
始まります//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) および (temp=1 )) または ((pos(subax,endpartabc)=1) および (temp=0))
開始 //ddd
temp=1 の場合、temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1) ;
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
終わり//ddd
それ以外の場合は //ddd
開始 //ddd
温度=0の場合
始める
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
温度:=1;
続く;
終わり;
isabclikeax:=false;
壊す;
終わり; //
終了;//ccc
終わり;//bbb
終わり;//ああ
関数は like(abc,ax:string):boolean; です。
始める
islike:=isABClikeAX(abc,ax);
終わり;
FUNCTION Widecard(abc,ax:string):boolean;
始める
Widecard:=isABClikeAX(abc,ax);
終わり;
USES MATH に注意してください。MIN() が使用されているため、IF ステートメントを使用して MIN() を置き換えることもできますが、十分に明確ではありません。