Á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

« Anterior Versão 3 Próxima »

Função: AEVal

Executa um bloco de código para cada elemento de um array.

AEVal ( < aArray>, < bBloco>, [ nInicio], [ nCont] ) --> Nil

NomeTipoDescriçãoObrigatórioReferência
aArrayVetorIndica o array que será lido. X
bBlocoBloco de códigoIndica o bloco de código que será executado para cada elemento encontrado. X
nInicioNuméricoIndica o elemento inicial. Caso não seja especificado, o padrão assumido será o elemento um.
nContNuméricoIndica a quantidade de elementos que serão processados a partir do parâmeto nInicio. Caso não seja especificado, o padrão será todos os elementos do array.
Nil (Nulo)
//Exemplo 1#DEFINE CRLF Chr(13)+Chr(10)#DEFINE TAB  Chr(09)User Function Exemplo()Local aMatriz := {}Local bBloco := {|nArg| nArg + 1 }Local cChar := "", cMensagem := ""Local lFound := .F.Local nCount := 0  For nCount := 65 To 90    AAdd(aMatriz, Chr(nCount))  Next nCount//+----------------------------------------------------------------------------+//|Exemplifica o uso da função AEval                                           |//+----------------------------------------------------------------------------+  cChar := "T"  cMensagem += "Pesquisando [" + cChar + "] em " + CRLF  AEval(aMatriz, {|aMatriz| cMensagem += aMatriz + " " })  cMensagem += CRLF  lFound := .F.  AEval(aMatriz, {|aMatriz| IIf(aMatriz == cChar, lFound := .T., )})  cMensagem += "A partir da posição 01: " + IIf(lFound, "", "não ") + "encontrado" + CRLF  lFound := .F.  AEval(aMatriz, {|aMatriz| IIf(aMatriz == cChar, lFound := .T., )}, 21)  cMensagem += "A partir da posição 21: " + IIf(lFound, "", "não ") + "encontrado" + CRLF  lFound := .F.  AEval(aMatriz, {|aMatriz| IIf(aMatriz == cChar, lFound := .T., )}, 1, 19)  cMensagem += "A partir da posição 01 e até a posição 19: " + IIf(lFound, "", "não ") + "encontrado" + CRLF  lFound := .F.  AEval(aMatriz, {|aMatriz| IIf(aMatriz == cChar, lFound := .T., )}, 19, 2)  cMensagem += "A partir da posição 19 e até a posição 21: " + IIf(lFound, "", "não ") + "encontrado" + CRLF//+----------------------------------------------------------------------------+//|Apresenta uma mensagem com os resultados obtidos                            |//+----------------------------------------------------------------------------+Return MsgInfo(cMensagem, "AEval - Exemplo")-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//Exemplo 2//Este exemplo utiliza AEVAL() para fazer uma lista que consiste em itens selecionados de um vetor multidimensional.LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {}AEVAL(aFiles,	{ | file | AADD(aNames, file[1])      } )-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Exemplo 3Local aArray := { "Teste" , 123 } Local bBlock := { |x,y| conout(valtype(x)) , conout(y) }aEval(aArray,bBlock)//No exemplo acima , criamos um array com 2 elementos : O primeiro é um Caracter , e o segundo é um número ; e criamos um code-block que receberá em x (primeiro parametro fornecido pela função aEval) cada elemento do array , e y ( segundo parametro fornecido pela aEval ) o número do elemento do array que está sendo processado nesta execução. //O resultado de tela no console do Protheus Server deverá ser : Teste // Conteudo do primeiro elemento C // Tipo do conteudo1 // Numero do elemento processado123 // Conteudo do segundo elementoN // Tipo do Segundo Elemento2 // Numero do elemento processado//Caso o array passado como parâmetro seja um array multi-Dimensional , serão passados como parâmetros os arrays de primeiro nivel para o code-BLock. //Vejamos uma aplicação mais complexa : Um array multi-dimensional temos 2colunas , uma de código (string) e uma de valor ( numérica ) , e seja necessário realizar um cálculo de totalização da coluna numérica:  aItens := {}aadd(aItens,{"Branco",10})aadd(aItens,{"Preto",15})aadd(aItens,{"Cinza",12})// Podemos realizar a totalização pelo metodo tradicional :  nTotal := 0 For nI := 1 to len(aItens)nTotal := nTotal + aItens[nI][2]Nextconout(nTotal)      // 37// Ou utilizando a Funcão aEval :  nTotal := 0aeval(aItens , {|x| nTotal += x[2] } )conout(nTotal)

Exemplo da função AEVal
Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

  • Sem rótulos