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
Nome | Tipo | Descrição | Obrigatório | Referência |
aDestino | Vetor | Indica o array a ser avaliado. | X | |
ProcuraExp | Qualquer | Indica 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 | |
nInicio | Numérico | Indica a partir de qual elemento será realizada busca. Por padrão a pesquisa inicia no elemento 1. | ||
nCont | 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. |
-
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.
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
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas