Deletar arquivo com VL-FILE-DELETE

Dúvidas sobre AutoLISP...

Moderador: Moderadores

Responder
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

Deletar arquivo com VL-FILE-DELETE

Mensagem por evairpu »

Boa tarde...

Ando um pouco sumido daqui, mas dentro do possível continuo estudando um pouco de AutoLISP. Mas só para variar um pouco continuo com algumas dificuldades...
Hoje o objetivo é o seguinte: algumas pessoas aqui insistem em salvar os projetos em diretórios indevidos, aí vira aquela bagunça na hora de encontrar o tal projeto. Assim que estou tentando desenvolver uma rotina para dar uma "ajudinha" ao projetista. Mas estou com dois problemas:



1º PROBLEMA: Está dando um erro de sintaxe que não estou encontrando...

[lsp]
(defun c:TESTE (/)
(setq OLD_DWGNAME (getvar "dwgname"))
(setq OLD_DWGPREFIX (getvar "dwgprefix"))
(while
(if (wcmatch OLD_DWGPREFIX "*\\Projeto\\2009*")
(alert
"SALVE ESTE ARQUIVO NO DIRETÓRIO CORRETO:!!! \n .../PROJETO/2009/MÊS CORRENTE/..."
) ;_ fin de alert
(initdia)
(vl-cmdf "_.saveas")
(setq NEW_DWGNAME (getvar "dwgname"))
(setq NEW_DWGPREFIX (getvar "dwgprefix"))
(if (not (or (= NEW_DWGNAME OLD_DWGNAME)
(= NEW_DWGPREFIX OLD_DWGPREFIX)
) ;_ fin de or
) ;_ fin de not
(progn (setq DELETE_OLD_FILE
(strcat OLD_DWGPREFIX OLD_DWGNAME)
) ;_ fin de setq
(setq OLD_DWGNAME NEW_DWGNAME)
(setq OLD_DWGPREFIX NEW_DWGPREFIX)
(vl-file-delete DELETE_OLD_FILE)
) ;_ fin de progn
) ;_ fin de if
) ;_ fin de if
) ;_ fin de while
) ;_ fin de defun
[/lsp]

2º PROBLEMA: Quero depois de chamado o SAVEAS deletar automaticamente o outro arquivo para não ficar um monte de cópias espalhadas por um monte de pastas. Para isso estou usando o VL-FILE-DELETE para deletar um arquivo apontado com o uso de variáveis. Notei que quando teclo (alert (getvar "dwgprefix")) direto no prompt, ele me retorna algo do tipo ...\PASTA\SUBPASTA\..., mas seu direciono este valor para uma variável qualquer, ele me retorna algo do tipo ...\\PASTA\\SUBPASTA\\...
Penso que o VL-FILE-DELETE não está funcionando por isso. Até tentei usar o VL-STRING-TRANSLATE, mas mesmo assim não estou conseguindo...



Alguém tem alguma sugestão?
Desde já agradeço toda e qualquer colaboração.
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

evairpu
1° problema: Falta um PROGN no 1° if
2° problema: A AutoLISP considera a \ numa string como sendo um caracter especial, portanto para representar uma \ deve ser utilizada duas \\. Portanto não é este o problema.
(vl-file-delete "c:\\teste.txt") é equivalente á (vl-file-delete "c:/teste.txt").

Note que na segunda forma foi utilizada uma / ao invés de \ (barra no outro sentido).

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@gmail.com
Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton »

o vl-file-delete deve estar sofrendo com as permissoes do windwos

vejas os valores de retorno desta função
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!
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

Mensagem por evairpu »

Obrigado Marcelo. O meu primeiro problema se resumiu apenas em falta de atenção mesmo...
Já esta segunda parte das \ , \\ , / eu realmente não sabia... Obrigado pelo esclarecimento...

Ontem a noite eu adaptei a rotina e fiz algumas alterações, o código ficou mais extenso, mas achei que ele ficou mais funcional às minhas necessidades. Maaasssss.... Não sei se o computador que não presta ou sabe-se Deus lá o que que está acontecendo, mas de vez em quando durante a execução do código ele "trava" o AutoCAD por alguns instantes. Até pensei que isso se acontecia por causa do autosave, que "pausava" a execução do código. Mas mesmo eu desabilite o autosave, ele ainda insiste em "travar" de vez em quando. Reparei que isso acontece principalmente na hora de encerrar a execução do código (quando o usuário finalmente salva dito projeto do diretório correto).

Qual pode ser a causa disso?

[lsp]
(defun c:TT (/)
(setq OLD_DWGPREFIX (getvar "dwgprefix")
OLD_DWGNAME (getvar "dwgname")
OLD_FILE (strcat OLD_DWGPREFIX OLD_DWGNAME)
LOOP_COUNTER 0
) ;_ fin de setq
(setq OLD_SAVE_TIME (getvar "savetime"))
(setvar "savetime" 0)
(while
(if
(and (<= LOOP_COUNTER 15)
(not
(wcmatch
OLD_DWGPREFIX
"*F:\\Projeto\\2009*"
) ;_ fin de wcmatch
) ;_ fin de not
) ;_ fin de and
(progn (SAVE_AS_NEW_FILE)
(DELETE_OLD_FILE)
(setq OLD_DWGPREFIX NEW_DWGPREFIX
OLD_DWGNAME NEW_DWGNAME
LOOP_COUNTER (+ LOOP_COUNTER 1)
OLD_FILE (strcat OLD_DWGPREFIX OLD_DWGNAME)
) ;_ fin de setq
) ;_ fin de progn
(progn
(if (wcmatch
OLD_DWGPREFIX
"*\\Autodesk AutoCAD\\Gesso Anhangabaú Ltda EPP*"
) ;_ fin de wcmatch
(exit)
(progn (alert "ESTE COMANDO SERÁ CANCELADO.") (exit))
) ;_ fin de if
) ;_ fin de progn
) ;_ fin de if
) ;_ fin de while
(setvar "savetime" OLD_SAVE_TIME)
) ;_ fin de defun


(defun SAVE_AS_NEW_FILE (/)
(alert
"SALVE ESTE PROJETO NO DIRETÓRIO CORRETO:\n.../Autodesk AutoCAD/Gesso Anhangabaú Ltda EPP/..."
) ;_ fin de alert
(initdia)
(vl-cmdf "_.saveas")
(setq NEW_DWGPREFIX (getvar "dwgprefix")
NEW_DWGNAME (getvar "dwgname")
) ;_ fin de setq
) ;_ fin de defun


(defun DELETE_OLD_FILE (/)
(if (or (/= OLD_DWGPREFIX NEW_DWGPREFIX)
(/= OLD_DWGNAME NEW_DWGNAME)
) ;_ fin de or
(vl-file-delete OLD_FILE)
) ;_ fin de if
) ;_ fin de defun
[/lsp]
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

Mensagem por evairpu »

Neyton...

Quando você diz "deve estar sofrendo com as permissoes do windwos" você se refere a privilégios de administração da rede? Aquelas configurações de quem pode ler, executar, salvar alterações em determinados arquivos/pastas? Ao menos entendí isso...

Mas se for isso, acho que o problema não era esse, eu adaptei a rotina ontem a noite e consegui obter os resultados que eu esperava. Agora o problema é outro, conforme descrito em minha mensagem anterior...

Grato pela colaboração,
EVAIR P. UVINHA
Avatar do usuário
cracksther
Diamante
Diamante
Mensagens: 1063
Registrado em: Seg 13 Dez 2004 11:00:00 pm

Mensagem por cracksther »

evairpu... Quanto tempo fica travado? Se for apenas alguns instantes pode ser o tempo que o programa leva para salvar e apagar o arquivo.

Até mais!
Marcelo Silva - Cascavel - PR
cracksther@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

Mensagem por evairpu »

Então Marcelo, acho que não é isso não...
Como eu comentei ele fica "travado" depois que o usuário salva o arquivo na pasta correta... Mas como pode-se notar no código, mesmo que seja apontada uma pasta incorreta, ele faz o mesmo processo, salva um novo arquivo e deleta o anterior, a única diferença é que aí vai entrar naquele loop novamente pedindo para salvar na pasta correta... Por isso que acho que não seja o tempo de salvar e deletar, pois senão isso aconteceria a cada vez que passasse por este loop. Não?

O tempo de espera varia de um caso para outro... Está entre 15 e 60 segundos...
E nem é toda vez que o programa é executado que acontece isso...

A unica coisa que me veio em mente mesmo foi realmente o Autosave, mas acredito que com o que eu fiz neste código era para ele não me importunar mais... Ou sera que fiz algo de errado mesmo?
Avatar do usuário
neyton
Master
Master
Mensagens: 1668
Registrado em: Qui 25 Dez 2003 11:00:00 pm
Contato:

Mensagem por neyton »

sim, as permissoes de gravação e leitura do windows...

quanto a demorar... nao sei... pode ser problema de atrazo na rede...
aqui deu uns erros na nossa rede e o cad dizia que nao podia gravar o arquivo devido a gravação atrazada...
sei la...
como que usa o html daqui?
visite o meu blog: http://tbn2.blogspot.com
lisps exclusivas pra download!!
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

Mensagem por evairpu »

Beleza Neyton, vou prestar atenção nestes detalhes.
Valeu... T+
Responder