Página 2 de 2

Codeblock para String, tem como? - Harbour

Enviado: 09 Mai 2011 19:55
por Pablo César
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

Enviado: 09 Mai 2011 21:51
por sygecom
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: Selecionar todos

bBloco = { || max(10,8) }
cSTRING_BLOCK:=valtoprg(bBloco)

Pablo essa é para ti...
Imagem

Codeblock para String, tem como? - Harbour

Enviado: 09 Mai 2011 22:02
por Pablo César
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

Enviado: 09 Mai 2011 22:20
por asimoes
Aos Mestres,

Isto é possível?

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

Função ValToPrg

Código: Selecionar todos

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

Enviado: 10 Mai 2011 14:15
por Pablo César
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

Enviado: 10 Mai 2011 15:04
por sygecom
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

Enviado: 07 Mai 2014 19:40
por Pablo César
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

Enviado: 08 Mai 2014 02:57
por rossine
Olá pablo,

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

Código: Selecionar todos

#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

Enviado: 08 Mai 2014 10:11
por Pablo César
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.