Realiza a leitura do array à procura de um valor específico. Funciona da mesma forma que a função AScan, porém quando utilizado um bloco de código para realizar a busca, o mesmo é chamado com um segundo parâmetro, informando qual é o elemento do array em questão que está sendo verificado na chamada corrente do bloco de código.
Sintaxe
AScanX( < aDest >, < bSearch >, [ nStart ], [ nCount ] )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
aDest | vetor | Indica o array a ser avaliado. | X |
|
bSearch | bloco de código | Indica o valor que será pesquisado através de um bloco de código. | X |
|
nStart | numérico | Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1. |
|
|
nCount | numérico | Indica por quantos elementos serão considerados na operação de busca. Caso não especificado, todos os elementos do array a partir da posição inicial de busca serão considerados. |
|
|
Retorno
Nome | Tipo | Descrição |
---|---|---|
nRet | numérico | Retorna um valor numérico que representa a posição que ocupa no array pelo último elemento lido. Quando não encontra é retornado 0. |
Observações
- A função retorna o índice do valor encontrado no array para a primeira execução do bloco de código que retornar .T.. Caso nenhum retorne .T. a função retorna 0 (zero).
- Em build iguais ou anteriores a 7.00.101202A, caso o terceiro argumento (nStart) fosse especificado, em caso de sucesso, a função retornava o índice encontrado relativo à posição inicial de busca. Este comportamento foi corrigido, para igualar com o comportamento da função AScan, em builds iguais ou superiores a 7.00.111010A.
Exemplos
#DEFINE CRLF Chr( 13)+Chr( 10) user function ascanx1() Local aExemplo := {} Local cMensagem := "" //+----------------------------------------------------------------------------+ //|Exemplifica o uso da função AScanX | //+----------------------------------------------------------------------------+ AAdd( aExemplo, "Banana" ) AAdd( aExemplo, "Maçã" ) AAdd( aExemplo, "Pêra" ) AAdd( aExemplo, "Limão" ) AAdd( aExemplo, "Abacaxi" ) AAdd( aExemplo, "Laranja" ) AAdd( aExemplo, "Mamão" ) AAdd( aExemplo, "Graviola" ) cMensagem += "Abacaxi" + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=1}) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x == "Abacaxi" .And. y <= 1 } ) ) + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=5}) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x == "Abacaxi" .And. y <= 5 } ) ) + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=6}, 2) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x == "Abacaxi" .And. y <= 6 }, 2 ) ) + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=6}, 2) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x== "Abacaxi" .And. y <= 6 }, 2 ) ) + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=6}, 2, 2) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x == "Abacaxi" .And. y <= 6 }, 2, 2 ) ) + CRLF cMensagem += "AScanX( aExemplo, {|x,y|x=='Abacaxi' .And. y<=6}, 2, 2) = " + ; cValToChar( AScanX( aExemplo, { | x, y | x == "Abacaxi" .And. y <= 6 }, 2, 2 ) ) //+----------------------------------------------------------------------------+ //|Apresenta uma mensagem com os resultados obtidos | //+----------------------------------------------------------------------------+ return MsgInfo( cMensagem, "Exemplo do AScanX" )
Resultado do Exemplo
Abrangência
Microsiga Protheus 8.11, Protheus 10, TOTVS Application Server 10, ByYou Application Server
Veja também