Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

Versão 1 Próxima »

Função: AScan

Percorre um array procurando por um valor especificado. Pode ser especificado um valor a ser buscado, ou pode ser informada uma condição de busca através de um bloco de código. 

AScan ( < aDestino>, < ProcuraExp>, [ nInicio], [ nCont] ) --> nRet

NomeTipoDescriçãoObrigatórioReferência
aDestinoVetorIndica o array a ser avaliado. X
ProcuraExpQualquerIndica a expressão de busca. Para um array de dimensão simples, pode ser colocado diretamente um valor a ser procurado. Para uma busca mais complexa ou para uma busca em array muti-dimensional, deve ser especificado um bloco de código. X
nInicioNuméricoIndica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1.
nContNuméricoIndica 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.
    nRet(numerico)
  • Caso o valor procurado seja encontrado, será retornado o número do elemento do array correspondente. Caso contrário, é retornado o valor 0 (zero).
Em uma busca utilizando um array de dimensão simples, a expressão de busca <ProcuraExp> pode ser do tipo "C" Caractere, "N" Numérico,  "D" Data ou  "L" Lógico.  O array pode conter elementos de tipos variados, as comparações somente serão realizadas quando o elemento do array em questão for do mesmo tipo do conteúdo informado para busca.  Quando realizada a busca por uma string, a determinação da igualdade entre a string informada para busca e a string do elemento do array está sujeita ao estado da definição SET EXACT do Advpl, por padrão desligada -- veja comportamento do operador   "=" ( igualdade simples) entre Strings do Advpl.


Caso a busca em questão seja feita em um array multi-dimensional ( array de array(s) ) , ou a condição de busca seja mais complexa ou específica, até mesmo uma condição composta, podemos especificar em <ProcuraExp> um bloco de código, que receberá como parâmetro um elemento por vez do array aDestino, a partir da posição inicial de busca. O code-block deve retornar um valor lógico .T. ( Verdadeiro) caso o elemento em questão seja o elemento desejado, e a condição de busca seja satisfeita, e quando isto acontecer, a função ascan() retornará o número do elemento do array aDestino que foi informado ao bloco de código que atendeu a condição de busca.  Caso o bloco de código retorne .F. ( Falso ), indicando que o elemento informado não atende a condição de busca, será fornecido o proximo elemento do array e o bloco de código é avaliado novamente. A operação de busca é encerrada até que todos os elementos compreendidos pela parametrização nInicio / nCont sejam vasculhados.  Se nenhuma chamada do bloco de código retornar .T., a função Ascan() retornará 0 , indicando que nenhum elemento pesquisado satisfez a condição de busca. 


#DEFINE CRLF Chr(13)+Chr(10)User Function Exemplo()Local aExemplo := {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}Local cMensagem := ""//+----------------------------------------------------------------------------+//|Exemplifica o uso da função AScan                                           |//+----------------------------------------------------------------------------+  cMensagem += "Elemento 5 " + CRLF  cMensagem += "Em " + cValToChar(AScan(aExemplo, 5)) + CRLF  cMensagem += "A partir da posição 6 em " + ;    cValToChar(AScan(aExemplo, 5, 6)) + CRLF  cMensagem += "A partir da posição 1 procurados em 3 em " + ;    cValToChar(AScan(aExemplo, 5, 6, 3)) + CRLF//+----------------------------------------------------------------------------+//|Apresenta uma mensagem com os resultados obtidos                            |//+----------------------------------------------------------------------------+Return MsgInfo(cMensagem, "Exemplo do AScan")

Exemplo da função AScan
Microsiga Protheus 8.11 , Protheus 10

  • Sem rótulos