Olá,
Recentemente passei a utilizar com certa frequência a função 'posEx' então decidi fazer uma postagem sobre esta função que é muito útil.
a estrutura desta função é :
PosEx(const SubStr, S: string; Offset: Integer = 1): Integer;
exemplo:
var
nomeCompleto: string ;
nomeParte : string ;
begin
nomeCompleto := 'Ordem e progresso' ;
nomeParte := 'Ordem' ; //trim( edtVl2.Text ) ;
showmessage( nomeCompleto + #13 + nomeParte + #13 + intToStr( posEx( lowercase( nomeParte ), lowercase( nomeCompleto ), 0 ) ) ) ;
end ;
execução
Veja que esta função retorna a posição de onde o trecho da cadeia é similar à totalidade da cadeia, ou seja, visto que que em 'Ordem e progresso', 'Ordem' inicia a partir da primeira posição.
se alterarmos 'nomeParte' para 'Orden':
desta vez o valor retornado foi '0', pois o trecho de cadeia 'Orden' não existe na cadeia completa 'Ordem e progresso'.
Desta vez, vou referenciar nomeParte como 'progresso':
desta vez o valor retornado foi '9', pois o trecho de cadeia 'progresso' se encontra a partir da posição 9 da cadeia (completa) 'Ordem e progresso'.
se você já está a algum tempo no ramo da programação, é natural que você se pergunte "Por que você não usa a função 'pos'?", isso é natural, então eu te respondo:
diferente da função 'pos', na função 'posEx' eu consigo controlar a partir de onde a cadeia será analisada, por exemplo.
vamos manter os princípios do exemplo anterior, porém desta vez vou enviar mais um parâmetro para a função posEx:
em vez de enviar:
posEx( lowercase( nomeParte ), lowercase( nomeCompleto ), 0 )
ou
posEx( lowercase( nomeParte ), lowercase( nomeCompleto ) )
vou enviar
posEx( lowercase( nomeParte ), lowercase( nomeCompleto ), 10 )
desta forma, ao executar o programa e enviar para nomeParte como 'progresso', será apresentado:
perceba que o valor retornado desta vez foi '0', pois eu ordenei a função 'posEx' que realize a análise a partir da posição 10, ou seja, tudo antes desta posição será ignorado.
outro exemplo, vou enviar para nomeParte a cadeia 'rogresso':
ai está, o retorno foi 10, pois o trecho de cadeia 'rogresso' é iniciado na posição 10.
agradeço pela atenção, até a próxima.