Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Incluir Página
tec:AScan
tec:AScan

Sintaxe

 

ASCAN( <array>, <expressão>   [ , <expressão numérica 1> ]   [ , <expressão numérica 2> ... ] )

 

Propósito

 

Pesquisa um determinado valor ou avalia um bloco de código pelos elementos de um array.

 

Argumentos

 

< array >

 

Define o nome do array que será pesquisado.

 

< expressão  >

 

Define o valor que será pesquisado ou o bloco de código a ser avaliado.

 

Pode ser uma expressão que resulta em qualquer tipo de dado.

 

< expressão numérica 1 >

 

Define o número do primeiro elemento a ser pesquisado. Se não for especificado, será assumido o primeiro elemento do array.

 

< expressão numérica 2 >

 

Define a quantidade de elementos que serão pesquisados a partir do elemento definido pela expressão numérica 1. Se este argumento não for especificado, serão pesquisados todos os elementos do array a partir do elemento inicial definido pela expressão numérica 1.

 

Utilização

 

Utiliza-se a função ASCAN() quando é necessário descobrir o número do elemento de um array que possui um determinado conteúdo ou para o qual um bloco de código resulte verdadeiro (.T.).

 

A função ASCAN() fornece o número do primeiro elemento que possui o conteúdo pesquisado ou para o qual o bloco de código especificado torne-se verdadeiro. Se não for encontrado nenhum elemento com o valor especificado, ou se o bloco de código não se tornar verdadeiro, a função ASCAN() fornece o valor zero.

 

Quando estiver sendo pesquisado um valor, a função ASCAN() funciona como uma função dbSeek() sobre um array. O valor especificado pela expressão é comparado com o conteúdo de cada elemento do array. Se for encontrado um elemento que contenha um valor coincidente, a sua posição é fornecida. Se não for encontrado, é fornecido o valor zero.

 

Se o argumento de pesquisa for um bloco de código, a função ASCAN() executa o bloco de código para cada elemento do array dentro da faixa especificada. O valor do elemento é passado para o bloco de código, sendo executada então uma avaliação do bloco de código para esse valor. A pesquisa termina quando o bloco de código for avaliado como verdadeiro para um elemento, fornecendo o seu número, ou quando é atingido o último elemento especificado, fornecendo o valor zero.

 

Dicas

 

A função ASCAN() equivale à seguinte função de usuário:

 

FUNCTION PesqArr(aVetor, xDado, nInicio, nContador)

 

LOCAL nCont := 0

 

FOR nCont := nInicio To (nInicio + nContador – 1)

          IF aVetor[nCont] == xDado

                  RETURN nCont

          ENDIF

NEXT nCont

 

RETURN 0

 

Exemplos

 

O exemplo abaixo demonstra a pesquisa do conteúdo “AdvPL” em um array:

 

LOCAL aVetor := { “Java”, “AdvPL”, “C++” }

LOCAL nPos   := ASCAN(aVetor, “AdvPL” }

 

// Mostra o número do elemento no qual a expressão foi encontrada. Ou seja, mostra 2

MSGALERT( “Posição: “ + STR(nPos) )

 

// Mostra o conteúdo do elemento no qual a expressão foi encontrada. Ou seja, mostra AdvPL

MSGALERT( “Conteúdo: “ + aVetor[nPos] )

 

O exemplo abaixo demonstra a pesquisa em um array de três elementos utilizando valores simples e um bloco de código como critério de pesquisa. Os critérios do bloco de código ilustram como executar uma pesquisa sem fazer diferenciação entre maiúsculas e minúsculas:

 

LOCAL aArray := { "Tom", "Mary", "Sue" }

 

MSGALERT( ASCAN(aArray, "Mary") )                     // Resulta: 2

MSGALERT( ASCAN(aArray, "mary") )                     // Resulta: 0

 

MSGALERT( ASCAN(aArray, { |x| UPPER(x) == "MARY" }) )    // Resulta: 2