Page tree
Skip to end of metadata
Go to start of metadata

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

Exemplo 1
#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

 

  • No labels