Saltar para o conteúdo principal
Versão: 20 R7 BETA

Find in list

Find in list ( {* ;} lista ; valor ; alcance {; arrayElem {; *}} ) -> Resultado

ParâmetroTipoDescrição
*OperadorSe especificada, lista é um nome de objeto (cadeia) Se omitida, lista é um número de referência de lista
listaInteger, TextNúmero de referência de lista (se omitida *) ou Nome do objeto de tipo lista (se passada *)
valorTextValor a buscar
alcanceInteger0=Lista principal, 1=Sub-lista
arrayElemInteger array- Se omitido o 2do *: array de posições dos elementos encontrados - Se passado o segundo *: array de números de referência dos elementos encontrados
*Operador- Se omitido: utiliza a posição dos elementos - Se passado: utiliza o número de referência dos elementos
ResultadoInteger- Se omitido o 2do *: posição do elemento encontrado - Se passado 2do *: número de referência do elemento encontrado

Esse comando não é seguro para thread e não pode ser usado em código adequado.

Descrição

O comando Find in list retorna a posição ou referência do primeiro elemento da lista que é equivalente à cadeia passada em valor. Se são encontrados vários elementos, a função também pode preencher um array arrayElem com a posição ou a referência de cada elemento.

Se passa o parâmetro opcional *, indica que o parâmetro lista é um nome de objeto (cadeia) correspondente a uma representação da lista no formulário. Se não passa este parâmetro, indica que o parâmetro lista é uma referência de lista hierárquica (RefLista). Se utilizar apenas uma representação de lista ou trabalhar com números de referência de elementos (se omitir o segundo *), pode utilizar indiferentemente uma ou outra sintaxe. Por outro lado, se utilizar várias representações da mesma lista e trabalhar com posições de elementos (se passa o segundo *), a sintaxe baseada no nome do objeto é necessária já que a posição dos elementos pode variar de uma representação a outra.

Nota: se utilizar o caractere @ no nome do objeto da lista e o formulário contém várias listas que correspondem a este nome, o comando Find in list será aplicado ao primeiro objeto cujo nome ele corresponda.

O segundo parâmetro * permite indicar se deseja trabalhar com as posições atuais dos elementos (nesse caso, este parâmetro é omitido) ou com as referências absolutas dos elementos (nesse caso, deve ser passado).

Passe em valor a cadeia de caracteres a pesquisar. A pesquisa será do tipo “exata”; em outras palavras, a pesquisa de “pedra” não encontrará “pedras”. Entretanto, pode utilizar o caractere arroba (@) para definir as pesquisas de tipo “começa por,” “termina em” ou “contém”.

O parâmetro alcance é utilizado para definir se a pesquisa deve ser realizada unicamente no primeiro nível da lista ou se deve incluir todas as sub-listas. Passe 0 para limitar a pesquisa ao primeiro nível da lista e 1 para estendê-la pesquisa a todas as sub-listas.

Se deseja conhecer a posição ou o número de todos os elementos correspondentes a valor, passe um array inteiro longo no parâmetro opcional arrayElem. Se for necessário, o array será criado e redimensionado pelo comando. O comando preencherá o array com as posições (se omitir o segundo *) ou os números de referência ( se for passado o segundo *) dos elementos encontrados.

As posições são expressas em relação ao elemento superior da lista principal, considerando o estado atual expandido/contraído da lista e das sub-listas.

Se nenhum elemento corresponde ao valor buscado, a função retorna 0 e o array arrayElem é retornado vazio.

Exemplo

Dada a seguinte lista hierárquica:

 $vlItemPos:=Find in list(hList;"I@";1;$arrPos)
  //$vlItemPos igual a 6
  //$arrPos{1} igual a 6 e $arrPos{2} igual a 11
 $vlItemRef:=Find in list(hList;"I@";1;$arrRefs;*)
  //$vlItemRef igual a 7
  //$arrRefs{1} igual a 7 e $arrRefs{2} igual a 18
 $vlItemPos:=Find in list(hList;"Data";1;$arrPos)
  //$vlItemPos igual a 9
  //$arrPos{1} igual a 9 e $arrPos{2} igual a 16
 $vlItemRefFind in list(hList;"Fecha";1;$arrRefs;*)
  //$vlItemRef igual a11
  //$arrRefs{1} igual a 11 e $arrRefs{2} igual a 23
 $vlItemPos:=Find in list(hList;"Fecha";0;*)
  //$vlItemPos igual a 0