Comparação de caracteres curinga DELPHI
Autor: Li Junyu e-mail: [email protected] ou [email protected] ou [email protected]
É reconhecido que o DELPHI tem funções mais fortes que o VB, mas às vezes não é tão conveniente quanto o VB em algumas pequenas coisas. Por exemplo, existe SENDKEY() no VB, que pode simular facilmente as teclas do teclado, mas é mais complicado no DELPHI. Outro exemplo é Existe LIKE em VB para implementar facilmente curingas. Compare, mas não consigo encontrar no DELPHI. Por isso, quando estou livre e ainda com vontade, faço uma função personalizada para realizar essa função, caso não esteja com vontade de fazer. uma coisa tão pequena novamente em uma emergência. Esse tipo de programa pequeno é inútil na prateleira. É melhor retirá-lo e deixá-lo emitir um pouco de luz e calor.
O algoritmo do programa primeiro adiciona '?' *', leia a substring, procure os caracteres entre os caracteres curinga na substring, ou seja, a substring na substring e, em seguida, pesquise na string de origem para ver se ela contém a substring na substring. ainda é muito difícil de implementar.
function isABClikeAX(abc,ax:string):boolean; //abc é a string de origem, ax é a substring
var
abcstart,axstart,abclength,axlength:inteiro;
endpartabc,endpartax,subax:string;
temp,abcwww,axwww:inteiro;
começar //aaa
temperatura:=0;
abcstart:=1;
axstart:=1;
axwww:=1;
abcwww:=1;
abccomprimento:=comprimento(abc);
comprimento do eixo:=comprimento(ax);
isabclikeax:=verdadeiro;
enquanto axstart<=axlength do
começar //bbb
se ax[axstart]='?'
começar
inc(axstart);
inc(abcstart);
se abcstart> abclength então
começar
isabclikeax:=falso;
quebrar;
fim;
continuar;
fim;
se ax[axstart]='*' então
começar
inc(axstart);
temperatura:=1;
axwww:=axstart;
abcwww:=abcstart;
continuar;
fim;
se não (ax[axstart] em ['?','*'] ) então
começar // ccc
endpartax:=copiar(ax,axstart,axlength-axstart+1)+'?*';
subax:=copiar(endpartax,1,min(pos('?',endpartax),pos('*',endpartax))-1);
axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
endpartabc:=copiar(abc,abcstart,abclength-abcstart+1);
se ((pos(subax,endpartabc)<>0) e (temp=1 )) ou ((pos(subax,endpartabc)=1) e (temp=0)) então
começar //ddd
se temp=1 então temp:=0;
abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1) ;
// axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
fim //ddd
senão //ddd
começar //ddd
se temperatura = 0 então
começar
axstart:=axwww;
abcwww:=abcwww+1;
abcstart:=abcwww;
temperatura:=1;
continuar;
fim;
isabclikeax:=falso;
quebrar;
fim; //ddd
fim; //ccc
fim; //bbb
fim; //aaa
FUNÇÃO é como(abc,ax:string):boolean;
começar
é como:=éABCcomoAX(abc,ax);
fim;
FUNÇÃO widecard(abc,ax:string):boolean;
começar
cartão largo:=isABClikeAX(abc,ax);
fim;
Preste atenção em USES MATH, porque MIN() é usado, você também pode usar a instrução IF para substituir MIN(), mas não é claro o suficiente.