Transformar Expressão "FOR" em Bloco de Código

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Bruno de Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 18 Out 2006 02:43

Transformar Expressão "FOR" em Bloco de Código

Mensagem por Bruno de Almeida »

Bom dia!

Pelas mensagens que vi aqui, acho que encontrei o melhor fórum sobre Clipper!

Minha dúvida: como transformo a expressão "FOR" logo abaixo em bloco de código?

Código: Selecionar todos

local nqopri := 9,asepri := {}

for x = 1 to nqopri
  aadd(asepri,iif(x == 4 .or. x == 5,.f.,.t.))
next
Obrigado.

Bruno
Ronaldo Bett
Usuário Nível 1
Usuário Nível 1
Mensagens: 6
Registrado em: 19 Set 2006 18:26

Mensagem por Ronaldo Bett »

Bruno blz
o que vc entende por bloco de código?
não entendi o que vc quer fazer!

Abraço
Ronaldo
Bruno de Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 18 Out 2006 02:43

Mensagem por Bruno de Almeida »

Ronaldo, falo dos codeblock do Clipper, que são montados pelas funções EVAL(), AEVAL() e DBEVAL().

Sei que:
- EVAL() utiliza-se genericamente (não me pergunte onde...);
- AEVAL() utiliza-se com arrays e pode substituir o [FOR... NEXT];
- DBEVAL() utiliza-se com registros do banco de dados e pode substituir o [WHILE... END].

Mas não domino blocos de código... Não sei montá-los!
E os exemplos do NG do Clipper mais me complicam do que esclarecem...

Portanto, gostaria da ajuda do pessoal do fórum para converter o expressão "FOR" que passei em codeblock.

Obrigado!

Bruno
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Bruno,
continue visitando o fórum, vai ser um prazer te ajudar.
Contudo, parece que você quer uma explicação completa.
Sobre o processamento de array´s, que alguns também chamam de matrizes e vetores, veja um tópico relativo no site:
www.caclipperwebsite.com
Está numa "linguagem" amigável e facílima de enteder.
Também o ng do clipper trás informações completas sobre as funções que processam array´s (elas começam com a letra "A").

MarceloG.
Bruno de Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 18 Out 2006 02:43

Mensagem por Bruno de Almeida »

MarceloG, não quero informação completa não.

O conceito (confesso que é superficial) já tenho.
Eu só quero uma ajuda para converter a expressão "FOR" que postei no primeiro post.
Aliás, nem sei se dá para converter aquela expressão em codeblock. Imagino que sim!

E não vai mudar em nada o programa! Ele está funcionando assim!
Foi uma curiosidade minha e assim também ajudaria no meu entendimento.

Obrigado!

Bruno
MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

Mensagem por MARCELOG »

Tá em "ingleis" mas dá pra entender legal.


AEVAL()
Execute a code block for each element in an array
------------------------------------------------------------------------------
Syntax

AEVAL(<aArray>, <bBlock>,
[<nStart>], [<nCount>]) --> aArray

Arguments

<aArray> is the array to traverse.

<bBlock> is a code block to execute for each element encountered.

<nStart> is the starting element. If not specified, the default is
element one.

<nCount> is the number of elements to process from <nStart>. If not
specified, the default is all elements to the end of the array.

Returns

AEVAL() returns a reference to <aArray>.

Description

AEVAL() is an array function that evaluates a code block once for each
element of an array, passing the element value and the element index as
block parameters. The return value of the block is ignored. All
elements in <aArray> are processed unless either the <nStart> or the
<nCount> argument is specified.

AEVAL() makes no assumptions about the contents of the array elements it
is passing to the block. It is assumed that the supplied block knows
what type of data will be in each element.

AEVAL() is similar to DBEVAL() which applies a block to each record of a
database file. Like DBEVAL(), AEVAL() can be used as a primitive for
the construction of iteration commands for both simple and complex array
structures.

Refer to the Code Blocks section in the "Basic Concepts" chapter of the
Programming and Utilities Guide for more information on the theory and
syntax of code blocks.

Examples

. This example uses AEVAL() to display an array of file names
and file sizes returned from the DIRECTORY() function:

#include "Directry.ch"
//
LOCAL aFiles := DIRECTORY("*.dbf"), nTotal := 0
AEVAL(aFiles,;
{ | aDbfFile |;
QOUT(PADR(aDbfFile[F_NAME], 10), aDbfFile[F_SIZE]),;
nTotal += aDbfFile[F_SIZE]);
} )
//
?
? "Total Bytes:", nTotal

. This example uses AEVAL() to build a list consisting of
selected items from a multidimensional array:

#include "Directry.ch"
//
LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {}
AEVAL(aFiles,;
{ | file | AADD(aNames, file[F_NAME]) };
)

. This example changes the contents of the array element
depending on a condition. Notice the use of the codeblock
parameters:

LOCAL aArray[6]
AFILL(aArray,"old")
AEVAL(aArray,;
{|cValue,nIndex| IF(cValue == "old",;
aArray[nIndex] := "new",)})

Files Library is CLIPPER.LIB.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

local asepri

asepri := array(9)
afill(asepri, .T.)

aeval(asepri, {|cvalue, nindex| iif(nindex = 4 .or. nindex = 5, asepri[nindex] := .F.,)})
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Bruno de Almeida
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 18 Out 2006 02:43

Mensagem por Bruno de Almeida »

MarceloG, obrigado pelas tentativas, mas não é nada disto que eu queria. O que eu queria o gvc passou em quatro linhas.

Obrigado a todos!

Bruno
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem por gvc »

AEVAL(<aArray>, <bBlock>, [<nStart>], [<nCount>]) --> aArray

então:

aeval(asepri, {|cvalue, nindex| asepri[nindex] := .F.}, 4, 5)

Para o que vc postou.
Coloquei isso, mas admito que nunca usei os parâmetros iniciais e finais.
Boa sorte.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Responder