Salvar variáveis
Moderador: Moderadores
-
marcoantonio.sommus
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 16 Mai 2012 11:08
- Localização: Minas Gerais
Salvar variáveis
Bom dia pessoal,
Estou tentando salvar as variáveis do meu sistema, com os respectivos valores, num arquivo externo num determinado momento da minha aplicação, para que seja possível restaura-las posteriormente. Para isso estou utilizando o comando SAVE TO, contudo este comando só salva os 10 primeiros dígitos do nome da variável. Esse problema já foi citado no post a seguir: viewtopic.php?f=4&t=10403 , contudo não foi dada uma solução. Algúem sabe alguma forma de salvar as variáveis do sistema em algum arquivo (.INI ou .MEM por exemplo) com o nome completo?
Desde já, muito obrigado!
Marco Antônio do Couto Fernandes
SOMMUS Automação
Estou tentando salvar as variáveis do meu sistema, com os respectivos valores, num arquivo externo num determinado momento da minha aplicação, para que seja possível restaura-las posteriormente. Para isso estou utilizando o comando SAVE TO, contudo este comando só salva os 10 primeiros dígitos do nome da variável. Esse problema já foi citado no post a seguir: viewtopic.php?f=4&t=10403 , contudo não foi dada uma solução. Algúem sabe alguma forma de salvar as variáveis do sistema em algum arquivo (.INI ou .MEM por exemplo) com o nome completo?
Desde já, muito obrigado!
Marco Antônio do Couto Fernandes
SOMMUS Automação
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Salvar variáveis
Olá Marco Antônio,
Use Hb_MvSave() e Hb_MvRestore. Veja o exemplo abaixo:
Nota: Assim como no Clipper, essas funções não salvam variáveis declaradas como LOCAL
Use Hb_MvSave() e Hb_MvRestore. Veja o exemplo abaixo:
Nota: Assim como no Clipper, essas funções não salvam variáveis declaradas como LOCAL
Código: Selecionar todos
Function Main()
Private cVariavel_Caracter := "Teste"
Private nVariavel_Numerica := 10
Private dVariavel_Data := Date()
Private lVariavel_Logica := .t.
Hb_MvSave( "Teste1.Mem", "*.*")
Release cVariavel_Caracter
Release nVariavel_Numerica
Release dVariavel_Data
Release lVariavel_Logica
VerVariaveis()
Return Nil
Function VerVariaveis()
Clear Screen
Hb_MvRestore( "Teste1.Mem", .t. )
?
? cVariavel_Caracter
? nVariavel_Numerica
? dVariavel_Data
? lVariavel_Logica
?
Return Nil
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)
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)
-
marcoantonio.sommus
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 16 Mai 2012 11:08
- Localização: Minas Gerais
Salvar variáveis
Olá Jairo,
Cara eu tentei usar estas funções no meu sistema mas ocorreu erro, dizendo que as funções não existiam. Você sabe se eu preciso adicionar alguma dll ou coisa do tipo?
Desde já, obrigado!
Marco Antônio do Couto Fernandes
Cara eu tentei usar estas funções no meu sistema mas ocorreu erro, dizendo que as funções não existiam. Você sabe se eu preciso adicionar alguma dll ou coisa do tipo?
Desde já, obrigado!
Marco Antônio do Couto Fernandes
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Salvar variáveis
Olá!
Eu utilizaria aquelas funções que salvam e restauram arrays am disco (não me lembro dos nomes). Nelas dá para salvar variáveis do tipo LOCAL, STATIC, codeblocks e até mesmo arrays. Ou partiria para os arquivos .INI.
Eu utilizaria aquelas funções que salvam e restauram arrays am disco (não me lembro dos nomes). Nelas dá para salvar variáveis do tipo LOCAL, STATIC, codeblocks e até mesmo arrays. Ou partiria para os arquivos .INI.
[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Salvar variáveis
Eu compartilho com a idéia do Alexandre, eu usaria uns .INI , como uso Hwgui já tem até umas funçõs que usa isso hoje:
Exemplo Lendo o INI:
nTIPO_IMP := VAL(Hwg_GetIni( 'Geral' , 'DANFE' , , "C:\CAMINHO_PASTA\ACBrNFeMonitor.ini")) // 0=retrato 1=paisagem
Exemplo gravando no INI
Hwg_WriteIni( 'Geral' , 'DANFE' , alltrim(str(nTIPO_IMP)) , "C:\CAMINHO_PASTA\ACBrNFeMonitor.ini" )
Exemplo Lendo o INI:
nTIPO_IMP := VAL(Hwg_GetIni( 'Geral' , 'DANFE' , , "C:\CAMINHO_PASTA\ACBrNFeMonitor.ini")) // 0=retrato 1=paisagem
Exemplo gravando no INI
Hwg_WriteIni( 'Geral' , 'DANFE' , alltrim(str(nTIPO_IMP)) , "C:\CAMINHO_PASTA\ACBrNFeMonitor.ini" )
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcoantonio.sommus
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 16 Mai 2012 11:08
- Localização: Minas Gerais
Salvar variáveis
Mas galera, existe alguma função que me retorne todas as variáveis do sistema com os respectivos valores para que assim eu as salve no .INI ?
att
att
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Salvar variáveis
Olá Marco Antônio,
Você está usando Harbour ou xHarbour? Me parece que estas funções são do Harbour.
Nota:
A função que o colega Alexandre citou (e que também não lembro o nome), foi implementada na versão 5.2 do Clipper.
Antes de publicar o post , compilei usando HARBOUR com o comando: HBMK2 TESTE.PRG. Não inclui nenhuma lib.marcoantonio.sommus escreveu:Você sabe se eu preciso adicionar alguma dll ou coisa do tipo?
Você está usando Harbour ou xHarbour? Me parece que estas funções são do Harbour.
Nota:
A função que o colega Alexandre citou (e que também não lembro o nome), foi implementada na versão 5.2 do Clipper.
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)
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)
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Salvar variáveis
a:=__MVSYMBOLINFO() // retorna um vetor com todas as variáveis e seus conteudosmarcoantonio.sommus escreveu:Mas galera, existe alguma função que me retorne todas as variáveis do sistema com os respectivos valores para que assim eu as salve no .INI ?
? valtoprg(a)
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
-
marcoantonio.sommus
- Usuário Nível 1

- Mensagens: 6
- Registrado em: 16 Mai 2012 11:08
- Localização: Minas Gerais
- viniciuspc
- Usuário Nível 1

- Mensagens: 40
- Registrado em: 19 Dez 2006 17:18
- Localização: Rio de Janeiro
Salvar variáveis
Para salvar Arrays, eu utilizo uma função do Rick Spence, Em Clipper
creditos para RICK SPENCE (me avisem se não puder ser publicado)
arquivo save_arr.ch
modo de se utilizar :
[]´s
creditos para RICK SPENCE (me avisem se não puder ser publicado)
Código: Selecionar todos
/***
* SAVEARRAY e RESTARRAY POR R I C K S P E N C E
**/
#include "save_arr.ch"
/***
* SaveArray(aArray, cFileName)
*
* aArray[] - -Array to save
* cFileName - -File in which to save array
*/
FUNCTION SaveArray(aArray, cFileName)
LOCAL fHandle := FCreate(cFileName , 0 ) // 0 = normal read/write; se ja existe sera esvaziado!
SaveArr(fHandle, aArray)
FClose(fHandle)
RETURN NIL
STATIC FUNCTION SaveArr(fHandle, aArray)
LOCAL LenArray, ElemType, i
// Write the array header
WRITE_AHD(fHandle, aArray) && save_arr.ch
LenArray := Len(aArray)
// Write each element in the array ~EL
FOR i := 1 TO LenArray
ElemType := ValType(aArray[i])
DO CASE
CASE ElemType == "A"
// A subarray, recurse ~EL
SaveArr(fHandle, aArray[i])
CASE ElemType == "B"
// Fatal error here- -we cannot write blocks
? "ERROR: CANNOT SAVE A CODE BLOCK"
InKey(0)
CASE ElemType == "C"
// Save a character element
SAVE_CHAR(fHandle, aArray[i])
CASE ElemType == "D"
// Save a date element
SAVE_DATE(fHandle, aArray[i])
CASE ElemType == "L"
// Save a logical element
SAVE_LOG(fHandle, aArray[i])
CASE ElemType == "N"
// Save a numeric element
SAVE_NUM(fHandle, aArray[i])
ENDCASE
NEXT
RETURN NIL
/***
* RestArray(cFileName)
*
* cFileName - -File from which to restore array
*/
FUNCTION RestArray(cFileName)
LOCAL aRestArr, fHandle := FOpen(cFileName , 0) // 0 = reading only !
GET_TYPE(fHandle)
aRestArr := RestArr(fHandle)
FClose(fHandle)
RETURN aRestArr
FUNCTION RestArr(fHandle)
LOCAL LenArray, i, ElemType, aArray
// Determine array's size and allocate it
LenArray := GET_AR_SIZE(fHandle)
aArray := Array(LenArray)
// Restore each element
FOR i := 1 TO LenArray
// Determine its type
ElemType := GET_TYPE(fHandle)
DO CASE
CASE ElemType == "A"
// A sub array so recurse ~EL
aArray[i] := RestArr(fHandle)
CASE ElemType == "B"
// Fatal error here ... we did not save one
CASE ElemType == "C"
aArray[i] := GET_CHAR(fHandle)
CASE ElemType == "D"
aArray[i] := GET_DATE(fHandle)
CASE ElemType == "L"
aArray[i] := GET_LOG(fHandle)
CASE ElemType == "N"
aArray[i] := GET_NUM(fHandle)
ENDCASE
NEXT
RETURN aArray
Código: Selecionar todos
// Listing 3.5: Macros to read and write array elements
/***
* SAVE_ARR.CH
*
* Clipper header file for array save and restore
*
*/
// In the following macros fh is a file handle
// Write character element: C<5 digit length><character value>
#define SAVE_CHAR(fh, cv) FWrite(fh, "C" + Str(Len(cv), 5) + cv)
// Write date element: D<datestring>
#define SAVE_DATE(fh, dv) FWrite(fh, "D" + Dtoc(dv))
// Write logical element: L<T or F character>
#define SAVE_LOG(fh, lv) FWrite(fh, "L" + Iif(lv, "T", "F"))
// Write numeric element:
// N<2 digit length>
// <numeric formatted as a string>
#define SAVE_NUM(fh, nv) FWrite(fh, "N" + Str(Len(Str(nv)),2) + ;
Str(nv))
// Write array header: A<4 digit array length>
#define WRITE_AHD(fh, av) FWrite(fh, "A" + Str(Len(av), 4))
// Read a type
#define GET_TYPE(fh) FReadStr(fh, 1)
// Read an array size
#define GET_AR_SIZE(fh) Val(FReadStr(fh, 4))
// Read a character element
#define GET_CHAR(fh) FReadStr(fh, Val(FReadStr(fh, 5)))
// Read a date element
#define GET_DATE(fh) Ctod(FReadStr(fh, 8))
// Read a logical element
#define GET_LOG(fh) FReadStr(fh, 1) == "T"
// Read a numeric element
#define GET_NUM(fh) Val(FReadStr(fh, Val(FReadStr(fh, 2))))
Código: Selecionar todos
...
local aVetor
local aVetRead
aVetor := { "primeiro" , "segundo" ,{{100,.T.}} };
SAVEARRAY(aVetor,"VETOR.ARR")
...
...
aVetRead := RESTARRAY("VETOR.ARR")
* assim aVetRead fica igual a aVetor
....
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)