Arrays (Matriz / Vetor)
É uma estrutura de dados que contém uma série de dados ordenados, chamados "elementos". Os elementos são referenciados por número ordinal, primeiro elemento é 1, segundo 2... Os elementos podem ser de qualquer tipo, caracter, numérico, data etc.
Você lembra do conceito de Matriz quando nas épocas de colégio, em Matemática??? Pois é, a mesmíssima coisa!
Um Array ou matriz é uma variável em clipper que armazena vários valores, onde tais valores são armazenados e consultados através de sua posição na matriz.
Vejamos um exemplo de uma matriz numérica de 4x3 (4 linhas e 3 colunas):

Que poderia ser representada assim:

Onde cada anm é um valor da matriz. Por exemplo, se você quisesse saber o valor de a32 na matriz B você encontraria o número 25. Analogamente os outros valores.
Vejamos outro exemplo, agora de uma matriz de uma só coluna, de 3x1 (3 linhas e 1 coluna), também conhecida de Vetor (só quando uma coluna):

Que poderia ser representada assim:

Onde cada anm é um valor da matriz. Por exemplo, se você quisesse saber o valor de a21 na matriz C você encontraria o número 7. Analogamente os outros valores.
Agora que você entendeu bem a idéia, vamos traduzir isso para linguagem Clipper:
A matriz B poderia ser contruída em Clipper da seguinte maneira, compare com a imagem:
| Em Clipper: | Na Matemática: |
// definindo a matriz:
|
![]() |
| Em Clipper: | Na Matemática: |
|
![]() |
Para consultar o valor de a32 da matriz B em clipper você poderia usar:
? B[3][2]
A matriz C poderia ser contruída em Clipper da seguinte maneira, compare com a imagem:
| Em Clipper: | Na Matemática: |
// definindo a matriz:
|
![]() |
| Em Clipper: | Na Matemática: |
|
![]() |
Para consultar o valor de a21 da matriz C em clipper você poderia usar:
? C[2]
Atenção: Se você colocar uma posição além do tamanho do array, o sistema retornará um erro de BASE/1132 Bound error: array access porque o elemento referenciado não existe. Por exemplo, se fizéssemos ? C[4] na matriz C citada acima, suscitaria este erro, pois C[4] não existe!
Ok, agora vamos para outro passo.
Para se buscar um valor dentro do Array, usa-se a função ASCAN(), vamos recordar sua sintaxe:
ASCAN(<aARRAY>, <expPROCURA>,[<nINICIO>], [<nCONTAGEM>])
ASCAN() retorna um valor numérico representando a posição do elemento procurado caso este seja encontrado, caso contrário, retornará 0 (zero).
Agora veja alguns dos diversos modos de buscar um valor dentro de um Array, usando a função ASCAN() do Clipper:
Exemplo 1: Busca simples.
aArray := { "Tom", "Mary", "Sue" }
Exemplo 2: Verificar quantas ocorrências de um valor dentro do Array.
-------
Obs.: A linha:
DO WHILE (nPos := ASCAN(aArray, "Mary", nStart)) > 0
é o mesmo que:
-------
Exemplo 3: Este exemplo procura uma matriz bi-dimensional usando um bloco de código (code block). A função retornará a posição da linha do elemento procurado. Note que o parâmetro aVal no bloco de código é uma matriz e que aVal[2] significa coluna 2 da matriz (alí você colocará o número da coluna que você irá procurar):
? ASCAN(aArr, {|aVal| aVal[2] == "quatro"}) // Retornará 2.