Página 1 de 2
Comando para guardar variaveis de memoria em uma matriz
Enviado: 24 Jun 2008 07:30
por juniorcamilo
Amigos... o Getlist guarda a variaveis que estao em gets, existe um comando para guardar as variaveis de memoria em uma matriz, sei que o comando 'save all like xxx to yyy' guarda as varaiveis de memoria em arquivo e o comando 'restore' recupera, mas para guardar em um matriz?
Comando para guardar variaveis de memoria em uma matriz
Enviado: 24 Jun 2008 08:29
por Pablo César
Oi Junior. O
SAVE TO <arquivo_MEM> guarda apenas variáveis e não MATRIZES ou VETORES, não existe comando para isso. O que dá para fazer é convertir VETOR em variáveis, claro que dependendo da situação isto pode provocar saturação de memória, visto que iriam ser declaradas tantas variáveis quanto forem o número de elementos contiver cada matriz. No entanto você pode fazer como o MIRO faz, isto é, criando um arquivo texto, onde guarda cada valor de uma determinada matriz. Isto é utilizado para guardar as configurações de cores do sistema e na abertura do programa é lido esse arquivo com MEMOREAD e SUBSTRING por SUBTRING até compor a quantidade pre-definida e que será armazenado em MATRIZ.
A rotina de gravar em arquivo MEM, eu nunca usei e iria demandar fazer uma propria rotina recursiva para poder processar uma estrutura de vetores aninhados. Então aqui vai um exemplo de como guardar em arquivo TEXTO o conteúdo de um vetor unidimensional:
Código: Selecionar todos
// Este primeiro bloco é utilizado no início do sistema para LER o arquivo e passar para VETOR
CONTECOR := {}
IF FILE( "PROGRAMA.CFG" )
VAR := MEMOREAD( "PROGRAMA.CFG" )
FOR CONTAR = 1 TO 13
AADD( CONTECOR, SUBS( VAR, ( CONTAR * 5 ) - 4, 5 ) )
NEXT
ELSE
CONTECOR := { "09/01","00/07","15/04","15/01","00/03","00/07","04/07","08/07","15/03","15/02","15/04","14/07","15/03" }
ENDIF
// A seguir é utilizado para a saída do sistema, que guardará o conteúdo do VETOR em arquivo texto
VAR := ""
FOR CONTAR = 1 TO 13
VAR += CONTECOR[ CONTAR ]
NEXT
MEMOWRIT( "PROGRAMA.CFG", VAR )
Enviado: 24 Jun 2008 10:48
por Maligno
Uso este recurso, salvando o conteúdo de matrizes em arquivo texto. Realmente todo o conteúdo deve ser convertido para string. Mas só quero lembrar que não será possível converter qualquer tipo de dados. Me refiro aos blocos de códigos.
Re: Comando para guardar variaveis de memoria em uma matriz
Enviado: 24 Jun 2008 19:42
por ANDRIL
Qual seria a utilidade??? visto que uma matriz para conter as variáveis talvez ocuparia a mesma quantidade de memória (se for este o intuíto) a não ser que vc esteja com problema de quantidade de nome de variáveis declaradas... seria isso?
No caso de salvar os nomes de variáveis dentro de um array, crie um com 3 elementos no qual o 1o elemento seria o nome da variavel, o 2o elemento o conteudo, o 3o elemento o tipo ("CNLD"), para que ao recuperar a variável soubesse o tipo correto de quando foi salvas.
Ate+
Enviado: 24 Jun 2008 20:48
por Maligno
Dependendo da forma como se programa, o uso de matrizes facilita muito o trabalho. Muito mais do que o uso de variáveis simples. Além disso, há uma economia substancial no uso da tabela de símbolos.
Mas guardar nomes de variáveis em matrizes é uma forma de trabalho que nunca vi. Realmente não consigo ver a utilidade disso. O que costumo salvar em arquivo são informações de configuração, que por si só nunca dependeriam de variáveis para existir. Se variáveis são mais fáceis por questão de nome, o comando #DEFINE resolve isso.
Re: Comando para guardar variaveis de memoria em uma matriz
Enviado: 25 Jun 2008 03:24
por rochinha
Amiguinho
Eu usei por muito tempo este codigo:
Código: Selecionar todos
#command SAVE GET TO <var> => PUBLIC <var> := M->GetList; M->GetList := {}
#command RESTORE GET FROM <var> => M->GetList := <var>
Só náo tenho um exemplo muito explicativo, somente este trecho de codigo:
Código: Selecionar todos
// Salva conteudo do ultimo conjunto de GETs e READ
SAVE GET TO ED_LISTA
// Cria nova entrada
M->RET_CAMPO := space(20)
@ 10,10 GET M->RET_CAMPO PICT "@!"
SET CURSOR ON
READ
SET CURSOR OFF
// Restaura conteudo de GETs salvos anteriormente
RESTORE GET FROM ED_LISTA
Re: Comando para guardar variaveis de memoria em uma matriz
Enviado: 25 Jun 2008 07:16
por juniorcamilo
o motivo foi que eu quero restaurar as variaveis contidas no arquivo criado pelo save like dentro de uma funcao elaborada que nao é a funcao main(), quando eu restauro as variaveis pelo comando restoure like dentro da funcao definida ele torna as variaveis restauradas privadas e nao publicas, ai sei la uma solucao penso eu era de restaurar estas variaveis para dentro d uma matriz e atribuilas a publica para que depois seja reconheciada no sistema todo... fui claro?
Re: Comando para guardar variaveis de memoria em uma matriz
Enviado: 25 Jun 2008 08:23
por ANDRIL
O comando RESTORE FROM arquivo.mem ao recuperar as variáveis seus escopos ficam perdidos salvo se for utilizar em uma função/procedure de nível mais baixo que a que chamou o comando.
Neste caso, após o uso das variáveis tem que salvá-las novamente no arquivo.mem e chamar este arquivo nas regiões onde serão utilizadas novamente já que não ficam disponíveis globalmente.
Não teria como criá-las desde o inicio como PUBLIC???
Ate+
Enviado: 25 Jun 2008 10:25
por Maligno
juniorcamilo escreveu:uma solucao penso eu era de restaurar estas variaveis para dentro d uma matriz e atribuilas a publica
Serial algo horrível de se fazer. Mas você poderia usar uma matriz pública. não?
Comando para guardar variaveis de memoria em uma matriz
Enviado: 05 Nov 2011 19:09
por Migao
Só pra comentar, no XBase++ (Clipper 32 bits) tem algumas coisas muito interessantes :
- Não há limitação de tamanho de array.
- Vc consegue "puxar" as MEMVAR pra um ARRAY ! A função SymbolInfo() te retorna um array com a lista de Public e/ou Private e/ou Funções etc. Inclusive funções implícitas da linguagem. Seria como entrar no meio do comando SAVE TO e pegar o que ele está gravando....
- Vc também pode salvar um CodeBlock ou array em um campo memo. A função VAR2BIN converte qq coisa em binário. Inclusive OBJETOS ! Então vc pode salvar num campo MEMO (foxpro) as suas variáveis... Por exemplo vc pode salvar um Array enorme (que pode conter inclusive Code Blocks) pra dentro de um campo Memo ! Muito legal...
Mas é isso aew !
Comando para guardar variaveis de memoria em uma matriz
Enviado: 05 Nov 2011 19:20
por Migao
Ah lembrei também de um uso legal pra essa função que joga as memvar num array :
Sempre uso um ErrorBlock customizado meu, próprio. Apresento uma tela padrão pro usuário (simplesmente falando que deu pau .. rs).
Por baixo eu formato um Email e mando pra mim mesmo.
Nesse email eu coleto o máximo de informações possível sobre o ambiente do erro. Então jogo um DUMP das MEMVAR com seus nomes e valores , pra facilitar a depuração. Faço o mesmo pros DBFs abertos e o conteudo dos campos de cada um.
E também um ScreenShot da tela (função ScreenStr da CaToolsIII que tb existe no XBase++). Outra função legal é EnvParam também da CaTools, que puxa as variaveis ambiente (SET PATH/etc)...
Ajuda MUITO na depuração !
Quando o usuário liga reclamando do problema, eu já tô com o email na mão sabendo qual foi o erro / etc etc.
Caso haja interesse no assunto eu posto uma amostra do email que formato aqui blz ?
T+
Comando para guardar variaveis de memoria em uma matriz
Enviado: 26 Mar 2013 08:56
por Pablo César
Se bem que pode ser gravado em arquivo texto qualquer variável, até mesmo vetores e pelo tempo que já transcreveu este tópico, possivelmente não precise de solução. Mas fica aqui outra dica que grava matrizes ou vetores em arquivos .MEM,
leia este tópico, mesmo o exemplo ter sido apresentado em Harbour/HMG, o código pode-se adaptado para Clipper.
Comando para guardar variaveis de memoria em uma matriz
Enviado: 26 Mar 2013 09:19
por Migao
Ah obrigado pelo retorno.
Eu uso XBase++ e nele temos funções extensivas para tratamento de Arrays.Uma delas é VAR2BIN (Variável para Binário).
Por exemplo :
Código: Selecionar todos
charbin:=Var2Bin(meuArray) // charbin fica sendo um char, daí vc pode dar um MEMOWRIT nele
// ou
STRFILE(charbin,"C:\TEMP\VAR.BIN") // STRing 2 File da CATOOLS
A função simétrica ao Var2Bin seria a Bin2Var.
Provavelmente no Harbour haja algo semelhante, ou até melhor.
Abraço !
Comando para guardar variaveis de memoria em uma matriz
Enviado: 26 Mar 2013 13:57
por Pablo César
Migao escreveu:Eu uso XBase++ e nele temos funções extensivas para tratamento de Arrays.Uma delas é VAR2BIN (Variável para Binário).
Ehhh a função VAR2BIN e BIN2VAR são poderosas funções. Seria bom se pudéssemos contar com os fontes para ver a sua composição. Visto que há diferenças de tipos de variáveis e para cada tipo tem uma forma de converter.
Comando para guardar variaveis de memoria em uma matriz
Enviado: 20 Jul 2024 08:38
por Marcelo Baliza
Eu uso o save all like....
guardo as variaveis em um arquivo do tipo .MEM
Depois e restauro.
Tem como listar todas as variaveis contidas no campo .MEM ?