Clipper On Line • Ver Tópico - Como usar & (Macro) no Harbou 3.4?

Como usar & (Macro) no Harbou 3.4?

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

Moderador: Moderadores

 

Como usar & (Macro) no Harbou 3.4?

Mensagempor clodoaldomonteiro » 04 Ago 2018 12:12

Boas,

Estou convertendo meus fontes de xHarbour 1.00 para Harbour 3.4 e vi que este interpreta de uma forma diferente o uso de & (Macro).

Exemplo:
      FOR i=1 TO FCOU()
         msg=FIEL(i)
          M->&msg = IF((fgrep .OR. reg_cop!=NIL).AND.!EMPT(rep[1]), rep[i], &msg.)
      NEXT

      /*
      inicializa campos de relacionamentos do com os campos do arquivo
      superior (pai)
      */
      FOR i=1 TO LEN(sistema[op_sis,O_CPRELA])
         msg=FIEL(VAL(SUBS(sistema[op_sis,O_ORDEM,1],i*3-2,3)))
          M->&msg. = &(sistema[op_sis,O_CPRELA,i])
      NEXT


Os comandos com & devem ser mudados para: M->&(msg), e pergunto o porque disso, se existe maneira de contornar?

Outra coisa, é que nas Framework que usava, tem muita comando com um "." (ponto) no final, tipo: "&msg.", que também está causando erro de syntax no Harbour, e pra falar a verdade nem sei para que serve esse Ponto no final.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar de usuário

clodoaldomonteiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 741
Data de registro: 30 Dez 2006 12:17
Cidade/Estado: Teresina-PI
Curtiu: 110 vezes
Mens.Curtidas: 31 vezes

Como usar & (Macro) no Harbou 3.4?

Mensagempor JoséQuintas » 04 Ago 2018 20:34

O ponto era uma coisa do tempo do clipper, porque as vezes a macro pegava a continuação que não era pra pegar.
A indicação de memória ou campo faz parte da variável, então provavelmente colocar dentro da macro.

&( "m->" + variável )
&( "field->" + variável )
&( "cliente->" + variável )


e se valer igual arquivo, tentar isto:

m->( &( variável ) )
field->( &( variável ) )
cliente->( &( variável ) )


Nada diferente do que fazemos com outras coisas:

cliente->( RecNo() )
cliente->( LastRec() )
cliente->( Eof() )
cliente->( dbSkip() )


Mas na prática eu evito macro ao máximo.
Prefiro digitar campo a campo do que FOR/NEXT.
É que se eu quiser procurar aonde mexe com um campo nota->ValorIcms, basta procurar nos fontes, e com macro é impossível.

Macro é mais lenta do que o campo direto, mas na maioria dos casos essa diferença nem dá pra perceber.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18010
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 9 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