Variáveis que não se apagam com o fechamento do arquivo

Dúvidas sobre o AutoCAD...

Moderador: Moderadores

Responder
oscardosanjos
Novato
Novato
Mensagens: 1
Registrado em: Seg 06 Nov 2017 7:52:26 pm

Variáveis que não se apagam com o fechamento do arquivo

Mensagem por oscardosanjos » Qua 08 Nov 2017 11:56:41 am

Boa tarde,
Eu estou executando uma rotina porém gostaria de saber se há alguma forma de manter as variáveis criadas mesmo com o fechamento do arquivo,é possível?

Abraços,

Avatar do usuário
marcos
Administrador
Administrador
Mensagens: 610
Registrado em: Sex 28 Nov 2003 11:00:00 pm
Localização: Itu / SP
Contato:

Re: Variáveis que não se apagam com o fechamento do arquivo

Mensagem por marcos » Qui 09 Nov 2017 7:22:01 pm

Ola,

Bem, as variáveis são salvas em memória, depois que reiniciar o AutoCAD, por exemplo, as variáveis se perdem.
Uma forma de você fazer isto seria salvar as variáveis em um arquivo externo e depois usar a sua rotina lisp para ler este mesmo arquivo... ou salvar os dados que você precisa dentro do próprio desenho e usar também uma rotina para ler estes dados.

at
Marcos Mendes de Almeida
mmalbr@gmail.com

Avatar do usuário
evairpu
Bronze 1/3
Bronze 1/3
Mensagens: 152
Registrado em: Seg 04 Ago 2008 12:00:00 am
Localização: Jarinú/SP

Re: Variáveis que não se apagam com o fechamento do arquivo

Mensagem por evairpu » Sáb 24 Fev 2018 12:04:14 pm

Bom dia!

Sei que já se passaram alguns meses desde a abertura deste tópico, mas acredito que o conhecimento de um meio de "guardar" variáveis entre sessões seja útil e de interesse de outras pessoas mais...

Para que você possa "manter na memória" o valor de uma ou mais variáveis, mesmo depois de fechar tal arquivo e reabrí-lo, você vai precisar criar um dicionário interno. Vejamos um exemplo de aplicação com código comentado:

Código: Selecionar todos

(defun c:exemplo (/)
  (vl-load-com)
  ;;Carrega as funções ActiveX
  (if (not
	;; Cria uma condicional para a execução do código      
	(dictsearch (namedobjdict) "MEU DICIONARIO")
      )
    ;; Verifica se o dicionário "MEU DICIONARIO" já existe,
    ;; executa o código abaixo                                 
    (progn
      ;; Abre um bloco de códigos para ser executado           
      (setq idade (getint "Qual sua idade?"))
      ;; Pergunta qual sua idade e memoriza na variável "idade"
      ;; Somente vai aceitar números inteiros como resposta    
      (vlax-ldata-put "MEU DICIONARIO" "IDADE" idade)
      ;; Copia o conteúdo da variável interna "idade" para a   
      ;; chave "IDADE"contida no dicionário "MEU DICIONÁRIO",  
      ;; que é criado automaticamente neste momento            
    )
    ;; Fim do bloco de códigos aberto por "PROGN"
    (alert (strcat "Você tem "
		   (vl-princ-to-string
		     (vlax-ldata-get "MEU DICIONARIO" "IDADE")
		   )
		   " anos de idade!"
	   )
    )
    ;; Caso já o dicionário "MEU DICIONARIO" já esteja criado  
    ;; exibe mensagem com a idade armazenada na chave "IDADE"  
  )
  ;; Fim da condicional de execução de código "IF NOT"
)
Segue agora código "limpo":

Código: Selecionar todos

(defun c:exemplo (/)
  (vl-load-com)
  (if (not
	(dictsearch (namedobjdict) "MEU DICIONARIO")
      )
    (progn
      (setq idade (getint "Qual sua idade?"))
      (vlax-ldata-put "MEU DICIONARIO" "IDADE" idade)
    )
    (alert (strcat "Você tem "
		   (vl-princ-to-string
		     (vlax-ldata-get "MEU DICIONARIO" "IDADE")
		   )
		   " anos de idade!"
	   )
    )
  )
)
Espero ter ajudado e que este pequeno exemplo seja útil a mais pessoas.

Responder