Clipper On Line • Ver Tópico - Codeblock para String, tem como? - Harbour
Mudar para estilo Clássico
Projeto Harbour - Compilador de código aberto compatível com o Clipper.
Postar uma resposta

Codeblock para String, tem como? - Harbour

09 Mai 2011 19:55

Dessas funções só conseguí testar a HB_Deserialize() mas obteve retorno vazio (2 espaços). Talvez porque sejam para xHarbour.
Lamentavelmente ainda fico sem ler os codeblocks dessa matriz.

Codeblock para String, tem como? - Harbour

09 Mai 2011 21:51

Puxa Pablo,
Pablo César escreveu:KKK ahhh você me faz rir Leonado... você sempre apressado... nem viu que era eu quem estava perguntando. Eu só aproveitei o tópico que tratava do mesmo assunto, mas o tópico é de 2005, hihihihi


Mas obrigado Leonardo, serviu para pesquisar sobre mensagens relacionadas. Mas com o ValtoPrg não funcionou como esperado. Compilar em HMG 3.0.35 ele vai mas o retorno deu vazio lendo a matriz e em outra tentativa deu erro Warning/0 ao executar o seu exemplo:

Sei lá o que você fez ai, mas fiz um teste rapido aqui com uma função do clipper mesmo e me mostrou um monte de CHR() que é assim mesmo que ele guarda o CODE, no meu caso aqui eu guardo o CODEBLOCK do ACTION dos MENUS para ser executados nos atalhos que são criado em tempo de execução em Hwgui + xHarbour.

Exemplo:
Código:
bBloco = { || max(10,8) }
cSTRING_BLOCK:=valtoprg(bBloco)


Pablo essa é para ti...
Imagem

Codeblock para String, tem como? - Harbour

09 Mai 2011 22:02

kkkkkk, essa da pá de ouro foi poruqe desenterrei o tópico ? Ahhh sei lá, primeiro pesquisei pra ver se tinha algo sobre o tema...
Sei lá o que você fez ai, mas fiz um teste rapido aqui com uma função do clipper mesmo e me mostrou um monte de CHR()
Tem certeza que fizestes em Clipper ? Acho que não, eihn ?

Vou deixar pra amanhã, eu queria ver os codesblocks mas não está dando... acho que em xHarbour deve funcionar direitinho, ja ví mensagens na internet falando que não funciona corretamente em Harbour...

Codeblock para String, tem como? - Harbour

09 Mai 2011 22:20

Aos Mestres,

Isto é possível?

bBloco = "{ || Funcao() }"
MsgInfo(HB_ValToStr(bBloco))
EVAL(&bbloco)

Função ValToPrg
Código:
FUNCTION ValToPrg( xValue )
   LOCAL cType := ValType( xValue )

   DO CASE
   CASE cType == "C"

      xValue := StrTran( xValue, Chr(0), '"+Chr(0)+"' )
      xValue := StrTran( xValue, Chr(9), '"+Chr(9)+"' )
      xValue := StrTran( xValue, Chr(10), '"+Chr(10)+"' )
      xValue := StrTran( xValue, Chr(13), '"+Chr(13)+"' )
      xValue := StrTran( xValue, Chr(26), '"+Chr(26)+"' )

      RETURN '"' + xValue + '"'

   CASE cType == "N" ; RETURN LTrim( Str( xValue ) )
   CASE cType == "D" ; RETURN 'HB_SToD("' + DToS( xValue ) + '")'
   CASE cType == "L" ; RETURN iif( xValue, ".T.", ".F." )
   CASE cType == "O" ; RETURN xValue:className() + " Object"
   CASE cType == "U" ; RETURN "NIL"
   CASE cType == "B" ; RETURN '{||...}'
   CASE cType == "A" ; RETURN '{.[' + LTrim( Str( Len( xValue ) ) ) + '].}'
   CASE cType == "M" ; RETURN 'M:"' + xValue + '"'
   ENDCASE

   RETURN ""

Codeblock para String, tem como? - Harbour

10 Mai 2011 14:15

Isto é possível?

bBloco = "{ || Funcao() }"
MsgInfo(HB_ValToStr(bBloco))
EVAL(&bbloco)
Se inserir um MsgInfo(ValType(bBloco)) depois da linha bBloco = "{ || Funcao() }" verá que na tela irá aparecer "C" que é do tipo caracter, não do tipo "B" bloco. ATé agora sem solução.

Codeblock para String, tem como? - Harbour

10 Mai 2011 15:04

Eu não disse que compilei em Clipper, eu disse que fiz um teste usando uma função do CLIPPER olhe o exemplo que postei. Só que uso xHarbour, mas no Harbour deve dar certo do mesmo jeito é tudo a mesma M.....

Codeblock para String, tem como? - Harbour

07 Mai 2014 19:40

Nossa gente ! Vim aqui correndo para compartilhar a minha mais recente conquista. Justamente o que eu vinha precisando e estudando há muito tempo este caso. Vim em consideração a muitos amigos daqui, principalmente a Rossine que é muito atenciosa comigo.

Por falar em Rossine, você é mulher não é Rossine ? Desculpe, senão for... pois o seu nick pode ser um sobrenome... rs Você é muito inteligente e obrigado pela atenção e de muitos aqui que são verdadeiros amigos.

Tenho muita consideração com esta comunidade, que deu-me muitas alegrias porque a benevolência do benemérito Paulo César Toledo, grande jóia do nosso querido Brasil e da nossa comunidade xBase, ele é inigualável. Muito sucesso para ti Toledo, você é o cara !

Então voltando ao assunto...

Neste tópico (desculpe estar em espanhol) mas acho que dá pra entender. Explico as minhas razões deste meu novo projeto que espero que ajude a todo que utilizam arquivos fmg.

A ideia é recuperar o conteúdo de um codeblock. Mas a jogada está, que antes de formar o codeblock seja feito como string. Neste no meu caso, eu tive que ler o arquivo fmg linha a linha (o que é caracterizado como string) e antes de ser lido pelo hb_compileFromBuf e ser transformado em atribuição de variável/array a função que continha eu havia colocado entre aspas. Depois foi só colocar := Eval(xVal) que retorna string. E se depois for necessário (é claro que sempre é), utilizar o codeblock, daí é só utilizar o macro para executá-la como comando.

Um grande abraço aqueles que sempre são dispostos a ajudar as pessoas. :)

Codeblock para String, tem como? - Harbour

08 Mai 2014 02:57

Olá pablo,

Abaixo tem uma solução paleativa para retornar codeblock em string. Veja se serve para você ok ?

Código:
#Translate CBNew(<b>)    => { <b>, <(b)> }
#Translate CBEval(<b>)   => eval( <b>\[1\] )
#Translate CBString(<b>) => <b>\[2\]

*************
function MAIN
*************

local bCod1 := CBNew( { || MINHA_FUNC("Teste") } )
local bCod2 := CBNew( { || MINHA_FUNC(12) } )
local bCod3 := CBNew( { || MINHA_FUNC("Teste") } )
local bCod4 := CBNew( { || nCtd += 1, npar2 -=1, npar3 +=10 } )

private nCtd := 0, npar2 := 0, npar3 := 0

cls

? "-CBEval-"
? CBEval( bCod1 )
? "---"
? CBEval( bCod2 )
? "---"
? CBEval( bCod3 )
? "---"
? CBEval( bCod4 )
? "---"

? "-CBString-"
? CBString(  bCod1 )
? "---"
? CBString(  bCod2 )
? "---"
? CBString(  bCod3 )
? "---"
? CBString(  bCod4 )
? "---"

return NIL

****************
function MsgInfo( cMsg )
****************

? cMsg

return NIL

*******************
function MINHA_FUNC( uDesc )
*******************

? valtype(uDesc), uDesc

return uDesc


Por falar em Rossine, você é mulher não é Rossine ? Desculpe, senão for... pois o seu nick pode ser um sobrenome... rs Você é muito inteligente e obrigado pela atenção e de muitos aqui que são verdadeiros amigos.


Não amiguinho, joy soy macho heheheh. Me parece que no sul do brasil tem muita mulher com este nome/sobrenome e as vezes o pessoal confundi mesmo. hehehe No problem...

Precisando estamos aqui,

Abraço,

Rossine.

Codeblock para String, tem como? - Harbour

08 Mai 2014 10:11

Exemplo perfeito, Rossine !

Ficou muito claro que fazer pelo translate fica muito mais simplificado e funcional.

Valeu pelo seu exemplo, muito didático.

rossine escreveu:Não amiguinho, joy soy macho heheheh
Caramba ! Foi mals então, ainda bem que pedi desculpas antecipadamente... Imagem

E muito obrigado pela sua contribuição !

:{ :)Pos

P.S. Ahhh se não se importarem, irei postar o seu exemplo lá no fórum HMG também.
Postar uma resposta