Nesse vídeo demonstraremos em como buscar um texto dentro de outro, trazendo todas as posições encontradas em um array, através da função cScan.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe101
Retorna um array com todas as posições encontradas de um texto
@type Function
@author Atilio
@since 12/12/2022
@obs
Função cScan
Parâmetros
+ Texto da string
+ Caractere a ser procurado
Retorno
+ Array com as posições do caractere encontrado na string
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe101()
Local aArea := FWGetArea()
Local cFrase := "O rato roeu a roupa do Rei de roma, a rainha com raiva resolveu remendar. Num ninho de mafagafos, cinco mafagafinhos há! Quem os desmafagafizá-los, um bom desmafagafizador será."
Local cBusca := "a"
Local aDados := {}
//Busca todas as repetições
aDados := cScan(cFrase, cBusca)
FWAlertInfo("Número de vezes que a busca se repete: " + cValToChar(Len(aDados)), "Teste cScan")
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Dan tem como fazer com que busque a palavra inteira exemplo Local cBusca := “Rei”?
Boa tarde Gabriel, tudo joia?
Com a cScan, infelizmente não é possível, pois ela pesquisa por 1 caractere. Pode ser que no futuro eles atualizem a rotina.
Se for só ver a quantidade de repetições da palavra, tipo “rei”, ai você pode usar a CountStr, igual nesse link – https://terminaldeinformacao.com/2023/11/12/verificando-quantas-vezes-uma-expressao-se-repete-com-a-funcao-countstr-maratona-advpl-e-tl-096/
Agora para pegar as posições mesmo, ai você poderia fazer um For percorrendo os caracteres da string. Algo +- assim:
cBusca := "REI nTamBusca := Len(cBusca) For nCaractere := 1 To Len(cTexto) If Upper(SubStr(cTexto, nCaractere, nTamBusca)) == cBusca //aqui vc trata adicionando no seu array EndIf NextUm grande abraço.