Сравнение подстановочных знаков DELPHI
Автор: Ли Цзюньюй, электронная почта: [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:целое число;
endpartabc, endpartax, subax: строка;
темп, abcwww, axwww: целое число;
начать//ааа
температура:=0;
абкстарт: = 1;
аксстарт:=1;
аксwww:=1;
абввв:=1;
abclength: = длина (abc);
длина оси: = длина (топор);
isabclikeax:=истина;
в то время как axstart<=axlength делать
начать//ббб
если ax[axstart]='?' тогда
начинать
вкл (axstart);
вкл (abcstart);
если abcstart> abclength, то
начинать
isabclikeax: = ложь;
перерыв;
конец;
продолжать;
конец;
если ax[axstart]='*', то
начинать
вкл (axstart);
температура:=1;
axwww:=axstart;
abcwww:=abcstart;
продолжать;
конец;
если нет(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);
если ((pos(subax,endpartabc)<>0) и (temp=1)) или ((pos(subax,endpartabc)=1) и (temp=0)) то
начать //ддд
если temp=1, то temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1) ;
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
конец //ддд
еще //ддд
начать //ддд
если температура=0, то
начинать
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
температура:=1;
продолжать;
конец;
isabclikeax:=false;
перерыв;
конец; // ддд;
конец;//ccc
конец;//ббб
конец;//ааа
ФУНКЦИЯ islike(abc,ax:string):boolean;
начинать
islike:=isABClikeAX(abc,ax);
конец;
ФУНКЦИЯ Widecard(abc,ax:string):boolean;
начинать
Widecard: = isABClikeAX (abc, топор);
конец;
Обратите внимание на USES MATH, поскольку используется MIN(), вы также можете использовать оператор IF для замены MIN(), но это недостаточно ясно.