Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/3279126062824/newLayouttecnologia.css
Portuguese

Pagetitle

...

AEval
AEval

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

...

Função: AEVal

...

array.

Sintaxe

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

...

Bloco de código
collapsefalse
AEval( < aArray >, < bBlock >, [ nStart ], [ nCount ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

aArray

...

vetor

Indica o array que será lido.

X

...

 

bBlock

...

bloco de código

Indica o bloco de código que será executado para cada elemento encontrado.

X

...

 

nStart

...

numérico

Indica o elemento inicial.

...

 

 

nCount

numérico

...

Indica a quantidade de elementos que serão processados a partir do

...

parâmetro nStart.

 

 

Observações

  • Caso nStart não seja especificado, é considerado o valor 1.
  • Caso nCount não seja especificado, o padrão será todos os elementos do array a partir de nStart.
  • Caso aArray seja um array multi-dimensional, serão passados como parâmetros os arrays de primeiro nivel para bBlock.

Exemplos

Bloco de código
themeEclipse
languagecpp
titleExemplo 1
linenumberstrue
collapsefalse
#DEFINE
.
Nil (Nulo)
//Exemplo 1#DEFINE
 CRLF Chr(13)+Chr(10)
#DEFINE TAB  Chr(09)

User Function 
Exemplo
aeval1()
  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
 1")
Bloco de código
themeEclipse
languagecpp
titleExemplo 2
linenumberstrue
collapsefalse
#DEFINE CRLF Chr(13)+Chr(10)

user function aeval2()
  //Este exemplo utiliza AEVAL() para fazer uma lista que consiste em
  // itens selecionados de um vetor multidimensional.
LOCAL

  
  Local aFiles := 
DIRECTORY
Directory( "\*.
dbf
txt" ), aNames := {}
AEVAL(aFiles,

  Local cMensagem := ""
  
  AEval( aFiles,  { | file | 
AADD
AAdd( aNames, file[1] ) } )
  varinfo( "aNames", aNames )
  
  AEval( aNames, { | name | cMensagem += ( name + CRLF ) } )
  
return MsgInfo( cMensagem, "AEval - Exemplo 2" )
Bloco de código
themeEclipse
languagecpp
titleExemplo 3
linenumberstrue
collapsefalse
user function aeval3()
  Local
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Exemplo 3Local
 aArray := { "Teste"
, 123 }
  Local bBlock := { | x, y | conout( x ), conout( valtype( x ) )
, conout( y ) }
aEval(aArray,bBlock)//

  Local nI := 0, nTotal := 0
  
  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
AEval)
  // cada elemento do array
, e y (
segundo parametro fornecido pela 
aEval
AEval) o número do elemento do array
  // que está sendo processado nesta execução.
  // 
  // O resultado de tela no console do 
Protheus
Application Server deverá ser
:
 
Teste
 // Teste --> Conteudo do primeiro elemento
 
C
 // C     --> Tipo do conteudo
 
conteudo1
 // 1     --> Numero do elemento 
processado123
processado
  // 
Conteudo
123 
do
 
segundo
 
elementoN // Tipo do Segundo Elemento2
--> Conteudo do segundo elemento
  // 
Numero
N 
do
 
elemento
 
processado//Caso
 
o
 
array
--> 
passado
Tipo 
como
do 
parâmetro
Segundo 
seja
Elemento
 
um
 
array multi-Dimensional , serão passados como parâmetros os arrays de primeiro nivel para o code-BLock. //
// 2     --> Numero do elemento processado
  // 
  // Vejamos uma aplicação mais complexa: 
:
Em 
Um
um array multi-dimensional temos 
2colunas
2 colunas,
  // 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,{
ASize( aArray, 0 )
  AAdd( aArray, { "Branco", 10 } )
aadd(aItens,{

  AAdd( aArray, { "Preto", 15 } )
aadd(aItens,{

  AAdd( aArray, { "Cinza", 12 } )
  
  // Podemos realizar a totalização pelo metodo tradicional
:
  nTotal := 0
  For nI := 1 to len(
aItens)
 aArray )
    nTotal := nTotal + 
aItens
aArray[nI][2]
Nextconout(nTotal

  Next
  conout( nTotal ) // Vai exibir "37"
  
//
 
  
37
// Ou utilizando a 
Funcão
função 
aEval
AEval 
:

  nTotal := 0
  
0aeval
AEval(
aItens
 aArray, { | x | nTotal += x[2] } )
  conout( nTotal )
Exemplo da função AEVal
Image Removed
 // Vai exibir os mesmos "37"
return

Resultado dos Exemplos

Image Added

Image Added

Image Added

Image Added

Abrangência

Microsiga Protheus 8.11, Protheus 10, TOTVS Application Server 10, ByYou Application Server

Veja

...

também