Clipper On Line • Ver Tópico - Eval no Clipper 5.3 roda, no Harbour não

Eval no Clipper 5.3 roda, no Harbour não

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Amparo » 19 Abr 2011 19:15

ola amigos

estou tendo um erro na execução do um prg como abaixo
┌──────────────────────────────────────────┐
│ Erro BASE/1004  No exported method: EVAL │
│          Erro DOS não disponível         │
│                                          │
│              Sair    Gravar              │
└──────────────────────────────────────────┘


é um fonte para gerar o arquivo padrao CNAB febrabam para os bancos

compilo o mesmo fonte em clipper e funciona, alias meu sistema esta em clipper 5.3 e estou passando para harbour

em um determinado prg tenho as seguintes linhas:
tenho um arquivo dbf chamado r_eports nele tenho 3 campos memos (R_HEADER, R_BODY e R_FOOTER)

em R_EPORTS->R_EADER tem
{ |H001,H001| "0" }
{ |H002,H002| "1" }
{ |H003,H009| "REMESSA" }
{ |H010,H011| "01" }
{ |H012,H026| PadR( "COBRANCA", 15 ) }
{ |H027,H030| STRZERO( VAL( ALLTRIM( BANCOS->NUM_AGENC ) ),4 ) }
{ |H031,H032| "00" }
{ |H033,H037| PadL( AllTrim( BANCOS->NUM_CONTA ), 5, "0" ) }
{ |H038,H038| BANCOS->DIG_CONTA }
{ |H039,H046| Space(08) }
{ |H047,H076| PadR( aSystem[19,1], 30 ) }
{ |H077,H079| "341" }
{ |H080,H094| PadR( "BANCO ITAU SA", 15 ) }
{ |H095,H100| CharRem( "/", DtoC( Date() ) ) }
{ |H101,H394| Space(294) }
{ |H395,H400| "000001" }
{ || Chr(13)+Chr(10) }



em R_EPORTS->R_BODY tem
{ |B001,B001| "1" }
{ |B002,B003| "02" }
{ |B004,B017| PadL( CharRem( "-/. ", aSystem[19,8] ), 14, "0" ) }
{ |B018,B021| PADL( ALLTRIM( BANCOS->NUM_AGENC ), 4, "0" ) }
{ |B022,B023| "00" }
{ |B024,B028| PadL( AllTrim( BANCOS->NUM_CONTA ), 5, "0" ) }
{ |B029,B029| BANCOS->DIG_CONTA }
{ |B030,B033| Space(04) }
{ |B034,B037| REPLICATE("0",04) }
{ |B038,B062| Space(25) }
{ |B063,B070| SUBSTR(CONTAS->TITULO_BCO,5,8) }
{ |B071,B083| REPLICATE("0",13) }
{ |B084,B086| BANCOS->CARTEIRA }
{ |B087,B107| SPACE(21) }
{ |B108,B108| "I"  }
{ |B109,B110| "01" }
{ |B111,B120| PadR( CONTAS->NUMDUP, 10 ) }
{ |B121,B126| CharRem( "/", DtoC( CONTAS->VENCDUP ) ) }
{ |B127,B139| StrZero( CONTAS->VALDUP * 100, 13, 0 ) }
{ |B140,B142| "341" }
{ |B143,B147| "00000" }
{ |B148,B149| "01" }
{ |B150,B150| "A" }
{ |B151,B156| CharRem( "/", DtoC( CONTAS->EMISSAO ) ) }
{ |B157,B158| BANCOS->INSTRUCAO1 }
{ |B159,B160| BANCOS->INSTRUCAO2 }
{ |B161,B173| StrZero( ( CONTAS->VALDUP * BANCOS->TX_PERMAN ) /30, 13, 0 ) }
{ |B174,B179| "000000" }
{ |B180,B192| StrZero( CONTAS->DESCONTO * 100, 13, 0 ) }
{ |B193,B205| Replicate( "0", 13 ) }
{ |B206,B218| Replicate( "0", 13 ) }
{ |B219,B220| IIf( CLIENTES->PESSOA = "J", "02", "01" ) }
{ |B221,B234| PadL( CharRem( "-/. ", AllTrim( CLIENTES->CGC_CPF ) ),14,"0" ) }
{ |B235,B264| PadR( CLIENTES->NOME, 30 ) }
{ |B265,B274| SPACE(10) }
{ |B275,B314| PadR( CLIENTES->ENDERECO, 40 ) }
{ |B315,B326| PADR( CLIENTES->BAIRRO, 12 ) }
{ |B327,B334| PadL( AllTrim( CharRem( "-", CLIENTES->CEP ) ), 8,  "0" ) }
{ |B335,B349| PadL( CLIENTES->CIDADE,15 ) }
{ |B350,B351| CLIENTES->ESTADO }
{ |B352,B381| PadR( aSystem[19,1], 30 ) }
{ |B382,B385| Space(04) }
{ |B386,B391| CharRem( "/", DtoC( CONTAS->VENCDUP + 1 ) )  }
{ |B392,B393| PadL( BANCOS->PRAZO_PROT, 2, "0" ) }
{ |B394,B394| Space(1) }
{ |B395,B400| GeraNumero() }
{ || Chr(13)+Chr(10) }


em R_EPORTS->FOOTER tem
{ |T001,T001| "9" }
{ |T002,T394| Space(393) }
{ |T395,T400| GeraNumero() }
{ || Chr(13)+Chr(10) }


meu prgs
FUNCTION GERA_CNAB(nRecRep)
LOCAL aHeadArray := {}
LOCAL aBodyArray := {}
LOCAL aFootArray := {}
LOCAL lRetorno     := .T.
LOCAL bCodeBlock
LOCAL sBuffer

...

R_EPORTS->( DBGoTo( nRecRep ) )

...
*o R_HEADER, R_BODY E R_FOOTER sao campos MEMO
aHeadArray := BuildArray( AllTrim( R_EPORTS->R_HEADER ) )
aBodyArray := BuildArray( AllTrim( R_EPORTS->R_BODY      ) )
aFootArray := BuildArray( AllTrim( R_EPORTS->R_FOOTER  ) )

...

FOR nCont := 1 TO len(aHeadArray)
   bCodeBlock := aHeadArray[ nCont ]
*nesta linha é que da o erro em harbour no clipper funciona
   sBuffer += Eval( bCodeBlock )

NEXT nCont

....

return lRetorno

*************************************************************
FUNCTION BuildArray( strMemo )

LOCAL  aArrayRet, nLinhas, nContador, uBloco

aArrayRet := {}
nLinhas   := MLCount( strMemo, 250 )

FOR nContador := 1 TO nLinhas
uBloco := AllTrim( MemoLine( strMemo, 250, nContador ) )

IF Empty( uBloco ) .OR. uBloco = "//"
    LOOP
ENDIF

ALTD()

AAdd( aArrayRet, uBloco )
NEXT nContador

RETURN  aArrayRet



ja tentei varias formas e nao consegui resultado satisfatorio, tentei colocar MACRO e da erro, sera que alguem tem alguma ideia de como resolver o problema,

abraços
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Pablo César » 19 Abr 2011 20:29

Na sua linha 24 do seu código prg, você está tratando como se fosse um codeblock mas não seria umk array ? O uso do AEval não seria o mais apropriado ? Desculpe se eu estiver enganado.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor alxsts » 19 Abr 2011 22:51

Olá!

A função Eval() recebe como parâmetro um code-block. Assim, a sua função BuildArray() deverá retornar um array de code-blocks. Acho difícil que isto esteja funcionando em Clipper 5.3...

Tente fazer
AAdd( aArrayRet,  &( "{ || " + uBloco + "}" ) )
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Amparo » 20 Abr 2011 08:46

ola amigos

Pablo César escreveu:Na sua linha 24 do seu código prg, você está tratando como se fosse um codeblock mas não seria umk array ? O uso do AEval não seria o mais apropriado ? Desculpe se eu estiver enganado.


Pablo
repare que a linha 24 esta dentro de um FOR entao eu passo para a VARIAVEL bCodeBlock o resultado de cada array, depois faço a chamada do EVAL()

alxsts escreveu:Olá!

A função Eval() recebe como parâmetro um code-block. Assim, a sua função BuildArray() deverá retornar um array de code-blocks. Acho difícil que isto esteja funcionando em Clipper 5.3...


alxsts
tenho o sistema feito em clipper 5.3 funcionando em varios clientes com arquivos para itau, bradesco...
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor alxsts » 20 Abr 2011 09:38

Olá!

Tudo bem, Amparo.

Testou a alteração que propus? Funcionou?
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Itamar M. Lins Jr. » 20 Abr 2011 10:30

Ola!
É relativamente fácil.
Colocar um alert('testando: '+linhatal)
Teste linha a linha para ver qual linha está com o problema.
O Harbour é mais sensível do que o clipper.

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Jairo Maia » 20 Abr 2011 10:34

Olá Amparo,

Qundo estava em xHarbour (não é seu caso, calma...), tive um problema com Macro em um módulo de um sistema na migração. Embora não fora com Code Block. Estudando o manual sobre macros, e lendo seu problema, me reportei ao manual do xHarbour pq lembrei que via Macro era possivel cria inclusive Code Block.

Esta ocorrendo erro, pq seu bloco está sendo recebido como String.

Vou colocar abaixo um exemplo do manual, mas em Harbour não consegui compilar, talvez deve ser incluido alguma lib, não sei.

Porém, caso em Harbour não tenha as funções do exemplo, creio que algum colega mais experiente possa lhe dizer quais são as similares em Harbour. Segue o exemplo do manual, e reitero: xHarbour. Veja que o exemplo mostra duas possibilidade de vc chamar uma função via Macro, e uma delas é code Block:
// The example outlines two possibilities of calling a function
// indirectly via macro expression. The first compiles a macro
// to PCode, and the second creates a code block with the macro
// operator. Note that functions that are only included in macro
// expressions should be REQUESTed to make sure they are linked.

   REQUEST QOut, Time

   PROCEDURE Main
      LOCAL cMacro := "QOut( Time() )"
      LOCAL cPCode := HB_MacroCompile( cMacro )
      LOCAL bBlock := &( "{||" + cMacro + "}" )

      HB_VMExecute( cPCode )

      EVal( bBlock )
   RETURN
Nota de Moderação:
Pablo César: Mensagem editada para colocar a tag [ code ]
Veja como utilizar esta tag: Clique aqui
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Re: eval no clipper 5.3 rada no harbour nao

Mensagempor Itamar M. Lins Jr. » 20 Abr 2011 10:46

Ola!
Talvéz lendo esse teste aqui possa ajudar.
Atenção para esta linha:
// Notice the Clipper bug: GetBlock is receiving the reference to
// the codeblock parameter than the value of EVAL(bResult) shouldn't
// depend on the order of block creation/value changing (GetBlock/SetRef).



//
// $Id: codebl.prg 9200 2008-08-20 11:04:28Z vszakats $
//

STATIC cbStatic

Function Main()
Local a := TestBlocks()
LOCAL cb

   qout( eval( a[ 1 ] ) )      // 23
   qout( eval( a[ 2 ], 42 ) )  // 42
   qout( eval( a[ 1 ] ) )      // 42
   qout( eval( a[ 2 ], 15 ) )  // 15

   mqout( 15, eval( a[ 1 ] ) )      // 15 15
   mqout( 14, eval( a[ 1 ] ) )      // 14 15
   mqout( 42, eval( a[ 2 ], 42 ) )  // 42 42
   mqout( 14, eval( a[ 2 ], 42 ) )  // 14 42
   mqout( 42, eval( a[ 1 ] ) )      // 42 42
   mqout( 14, eval( a[ 1 ] ) )      // 14 42

   GetArray( @a )
   PrintArray( @a )

   qout( "Test for variables passed by reference in a codeblock" )
   DetachWithRefer()

   qout( "Test for indirect detaching of local variables" )
   DetachToStatic( 1 )
   mqout( 2, EVAL( cbStatic, 1 ) )
   mqout( 3, EVAL( cbStatic, 2 ) )
   cb :=cbStatic
   DetachToStatic( 100 )
   mqout( 200, EVAL( cbStatic, 100 ) )
   mqout( 300, EVAL( cbStatic, 200 ) )
   mqout( 4, EVAL( cb, 3 ) )

   ReferParam()

Return( NIL )

Static Function TestBlocks()
LOCAL nFoo := 23
Return( { {|| nFoo }, {|n| nFoo := n } } )

Static Function mqout( nExpected, nGot )

   qout( nExpected, nGot )

Return( NIL )

/////////////////////////////////////////////////////////////////
PROCEDURE GetArray( a )
LOCAL i

   a :=ARRAY( 100 )
   FOR i:=1 TO 100
     IF (i % 6) == 0
         a[ i-2 ] =NIL
         a[ i-4 ] =NIL
     ENDIF
     a[ i ] := TestBlocks()
   NEXT

RETURN

PROCEDURE PrintArray( a )
LOCAL i

   FOR i:=1 TO 100
     IF a[i] != NIL
       EVAL( a[ i ][ 2 ], i )
       mqout( i, EVAL( a[ i ][ 1 ] ) )
     ENDIF
   NEXT

RETURN

//////////////////////////////////////////////////////////////////
Function DetachWithRefer()
Local nTest
Local bBlock1 := MakeBlock()
Local bBlock2 := {|| DoThing( @nTest ), qout( nTest ) }

   eval( bBlock1 )
   eval( bBlock2 )

Return( NIL )

Function MakeBlock()
Local nTest
RETURN( {|| DoThing( @nTest ), qout( nTest ) } )

Function DoThing( n )

   n := 42

Return( NIL )

//////////////////////////////////////////////////////////////////////
FUNCTION DetachToStatic( n )

  cbStatic ={|x| n+x}

RETURN NIL

// ------------------------------------------------------------
Function ReferParam()
Local bResult

? "Test for codeblock parameter passed by reference"

PassByValue( {|lEnd| ;
   bResult := GetBlock( @lEnd ), ; 
   SetByRef( @lEnd ) } )
// Clipper & xHarbour it's .T.
//In Harbour it is .F.
? "Printed value in Clipper  .T. =", Eval( bResult )           
?
// Notice the Clipper bug: GetBlock is receiving the reference to
// the codeblock parameter than the value of EVAL(bResult) shouldn't
// depend on the order of block creation/value changing (GetBlock/SetRef).

PassByRef( {|lEnd| ;
   bResult := GetBlock( @lEnd ), ; 
   SetByRef( @lEnd ) } )
// Clipper & xHarbour it's .T.
//In Harbour it is .F.
? "Printed value in Clipper  .T. =", Eval( bResult )           
?

? "2nd test for codeblock parameter passed by reference"

PassByValue( {|lEnd| ;
   SetByRef( @lEnd ), ;
   bResult := GetBlock( @lEnd ) } )
// Clipper & xHarbour it's .T.
//In Harbour it is .F.
? "Printed value in Clipper  .F. =", Eval( bResult )           
?

PassByRef( {|lEnd| ;
   SetByRef( @lEnd ), ;
   bResult := GetBlock( @lEnd ) } )
// Clipper & xHarbour it's .T.
//In Harbour it is .F.
? "Printed value in Clipper  .F. =", Eval( bResult )           
?

Return Nil

Static Function PassByValue( bBlock )
Local lSomeVar := .T.
Eval( bBlock, lSomeVar )
? "lSomeVar value in Clipper .T. =", lSomeVar
Return .T.

Static Function PassByRef( bBlock )
Local lSomeVar := .T.
Eval( bBlock, @lSomeVar )
? "lSomeVar value in Clipper .F. =", lSomeVar
Return .T.

Static Function SetByRef( lVar )
lVar := .F.
Return Nil

Static Function GetBlock( lVar )
Return {|| lVar }
// ------------------------------------------------------------


Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Re: eval no clipper 5.3 rada no harbour nao

Mensagempor Jairo Maia » 20 Abr 2011 11:28

Olá Amparo,

Tente esta alteração a apartir da linha 24 do testo "meu prgs":

FOR nCont := 1 TO len(aHeadArray)
bCodeBlock := aHeadArray[ nCont ]
/////////////////////////
bCodeBlock :=&( bCodeBlock )
//////////////////////////
sBuffer += Eval( bCodeBlock )
NEXT nCont

Parece que em Harbour dá certo.

Abraços
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Re: eval no clipper 5.3 rada no harbour nao

Mensagempor Amparo » 20 Abr 2011 11:42

ola amigos

alxsts

alxsts escreveu:Olá!

A função Eval() recebe como parâmetro um code-block. Assim, a sua função BuildArray() deverá retornar um array de code-blocks. Acho difícil que isto esteja funcionando em Clipper 5.3...

Tente fazer
AAdd( aArrayRet,  &( "{ || " + uBloco + "}" ) )


da forma que me passou da erro

┌─────────────────────────────────┐
│ Erro BASE/1449  Syntax error: & │
│     Erro DOS não disponível     │
│                                 │
│         Sair    Gravar          │
└─────────────────────────────────┘


Itamar M. Lins Jr. escreveu:Ola!
É relativamente fácil.
Colocar um alert('testando: '+linhatal)
Teste linha a linha para ver qual linha está com o problema.
O Harbour é mais sensível do que o clipper.


Itamar

aplicando o alert na linha conforme abaixo

FOR nCont := 1 TO nSize
bCodeBlock := aHeadArray[ nCont ]
alert(bCodeBlock)
sBuffer += Eval( bCodeBlock )

NEXT nCont

vou ter o seguinte resultado?

a primeira linha do array aHeadArray
┌─────────────────────────┐
│   { |H001,H001| "0" }   │
│                         │
│           Ok            │
└─────────────────────────┘

ai vai dar o erro na li sBuffer += Eval(bCodeBlock )
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Re: eval no clipper 5.3 rada no harbour nao

Mensagempor Itamar M. Lins Jr. » 20 Abr 2011 18:12

Hummm rapaz.
É para ter no array, uma expressão de cada véz.
Desse forma, continua sem saber qual é a expressão que dá erro.

Saudacões,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Re: eval no clipper 5.3 rada no harbour nao

Mensagempor Amparo » 20 Abr 2011 19:01

ola amigos

Itamar M. Lins Jr. escreveu:Hummm rapaz.
É para ter no array, uma expressão de cada véz.
Desse forma, continua sem saber qual é a expressão que dá erro.

Saudacões,
Itamar M. Lins Jr.


Itamar

pois tem, e o erro da logo na primeira ou seja quando vou aplicar EVAL em { |H001,H001| "0" }

Jairo Maia escreveu:Olá Amparo,

Tente esta alteração a apartir da linha 24 do testo "meu prgs":

FOR nCont := 1 TO len(aHeadArray)
bCodeBlock := aHeadArray[ nCont ]
/////////////////////////
bCodeBlock :=&( bCodeBlock )
//////////////////////////
sBuffer += Eval( bCodeBlock )
NEXT nCont

Parece que em Harbour dá certo.

Abraços


Jairo

da erro de macro &
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Re: Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Itamar M. Lins Jr. » 20 Abr 2011 22:40

Ola!
O Harbour acusa erro:
Function Main
? eval({ |H001,H001| "0" })


Compiling 'teste.prg'...
teste.prg(2) Error E0003 Duplicate variable declaration 'H001'
teste.prg(2) Error E0003 Duplicate variable declaration 'H001'
2 errors

Lógico tem que ser "H001,H00X" não pode ter duas variáves com o mesmo nome.
Como ele vai saber qual vai manipular e retornar o resultado ?

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6951
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 312 vezes
Mens.Curtidas: 508 vezes

Re: Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Jairo Maia » 21 Abr 2011 08:06

Olá Amparo,

Que estranho. Compilei o exemplo abaixo e funcionou:

REQUEST QOut, Time 
   
Proc Main()
Loca bBlock := "{|| QOut( Time() ) }"
  ? bBlock                   // string com estrutura de code block
  bBlock := &( bBlock )      // transforma em macro
  EVal( bBlock )             // executou QOut( Time() )
Retu
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar de usuário

Jairo Maia
Colaborador

Colaborador
 
Mensagens: 2733
Data de registro: 16 Ago 2010 13:46
Cidade/Estado: Campinas-SP
Curtiu: 371 vezes
Mens.Curtidas: 305 vezes

Re: Eval no Clipper 5.3 roda, no Harbour não

Mensagempor Amparo » 23 Abr 2011 08:51

ola amigos

FUNCIONOUUUUUUU...

tive que fazer duas alterações para funcionar.

no meu DBF campo MEMO que guardo as instruções de cada linha do arquivo layout CNAB, por exemplo
{ |H001,H001| "0" }
{ |H002,H002| "1" }
{ |H003,H009| "REMESSA" }

troquei por
{ |H001| "0" }
{ |H002| "1" }
{ |H003,H009| "REMESSA" }

no meu PRG
na linha com a seguinte instrução:
sBuffer += Eval( bCodeBlock )

acrescentei a macro
sBuffer += Eval( &(bCodeBlock) )

quero agradecer ao Itamar, Jairo, alxsts e pablo sem ajudar de vcs eu iria bater muito a cabeça e talvez disistiria de migrar para Harbour.

abrigado
Avatar de usuário

Amparo
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 337
Data de registro: 20 Ago 2010 10:38
Cidade/Estado: caieiras / sao paulo
Curtiu: 0 vez
Mens.Curtidas: 2 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Bing [Bot] e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro