Salvar um vetor em arquivo .mem
Enviado: 26 Mar 2013 08:53
No fórum oficial da HMG, o colega polaco Marek, apresentou-nos uma solução radical para guardar vetores em arquivo MEM e eu gostaria também de compartilhar aqui nesta comunidade também. Passo a relatar:
O código foi feito em HMG, mas pode ser utilizado em Harbour e adaptado em Clipper também. Espero que possa a vir ser útil e que tenham gostado !
Aí fiz um teste com a ideia de salvar vários vetores, como tinha sido indicado também, porém eu consegui desta forma:Como você sabe, você não pode salvar variável de matriz em arquivo de mem. O nome da variável também é limitado a 10 caracteres (eu testei).
Primeiro, eu tentei criar muitas variáveis para cada célula matriz. Mas, foi pouco bobo.
Então fiz de outra forma, declaro variável texto cTmp, por exemplo e ai configurei o seu valor para:
cTmp := "{|| aArrayToSave:=" + hb_valtoexp(aArrayToSave) + "}"
Ai esta variável do tipo texto pode ser gravada pelo comando:
Save all Like cTMP to MyMemFile
E para conseguir recuperar o meu vetor gravado no disco, preciso fazer deste modo:
Restore from MyMemFile Additive
Eval(&cTmp)
Código: Selecionar todos
#include <hmg.ch>
Function Main
Local aA1,aA2,aA3
If !File("MyMemFile.mem")
aA1:={1,"Test1",CtoD("01/01/2013"),.T.}
aA2:={2,"Test2",CtoD("02/01/2013"),.F.}
aA3:={3,"Test3",CtoD("03/01/2013"),.T.}
MsgInfo(hb_ValToExp(aA1), "Array aA1 Just assigned")
MsgInfo(hb_ValToExp(aA2), "Array aA2 Just assigned")
MsgInfo(hb_ValToExp(aA3), "Array aA3 Just assigned")
Private cTmp1 := "{|| aA1:=" + hb_valtoexp(aA1) +"}"
Private cTmp2 := "{|| aA2:=" + hb_valtoexp(aA2) +"}"
Private cTmp3 := "{|| aA3:=" + hb_valtoexp(aA3) +"}"
Save all Like cTMP* to MyMemFile
Endif
aA1:={}
aA2:={}
aA3:={}
Restore from MyMemFile Additive
aA1:=Eval(&cTmp1)
aA2:=Eval(&cTmp2)
aA3:=Eval(&cTmp3)
MsgInfo(hb_ValToExp(aA1), "Array aA1 recovered")
MsgInfo(hb_ValToExp(aA2), "Array aA2 recovered")
MsgInfo(hb_ValToExp(aA3), "Array aA3 recovered")
Return Nil