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는 하위 문자열입니다.
var
abcstart,axstart,abclength,axlength:정수;
endpartabc,endpartax,subax:문자열;
임시,abcwww,axwww:정수;
시작 //아아아
온도:=0;
abcstart:=1;
axstart:=1;
axwww:=1;
ABCwww:=1;
abc길이:=길이(abc);
축길이:=길이(ax);
isabclikeax:=true;
axstart<=axlength 하는 동안
시작 //bbb
ax[axstart]='?'이면
시작하다
inc(axstart);
inc(abcstart);
abcstart> abclength이면
시작하다
isabclikeax:=false;
부서지다;
끝;
계속하다;
끝;
ax[axstart]='*'이면
시작하다
inc(axstart);
온도:=1;
axwww:=axstart;
abcwww:=abcstart;
계속하다;
끝;
if not(ax[axstart] in ['?','*'] ) 그러면
시작//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 )) 또는 ((pos(subax,endpartabc)=1) and (temp=0)) then
시작 //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;
부서지다;
끝; //ddd
끝;//ccc
끝;//bbb
끝;/아아아
FUNCTION islike(abc,ax:string):boolean;
시작하다
islike:=isABClikeAX(abc,ax);
끝;
FUNCTION widecard(abc,ax:string):boolean;
시작하다
widecard:=isABClikeAX(abc,ax);
끝;
USES MATH에 주의하세요. MIN()을 사용하기 때문에 IF 문을 사용하여 MIN()을 대체할 수도 있지만 충분히 명확하지 않습니다.