乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 124|回复: 19

[编程交流] Lisp自动运行命令

[复制链接]

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:28:32 | 显示全部楼层 |阅读模式
大家好
我在一个文件夹中有一堆文件,我必须对几个文件进行清除。
我有一个lisp文件可以自动打开文件,
因此,我的想法是,打开文件后,如果文件名有7位数字,则清除命令应自动运行,如果文件名小于/大于7位,则命令不应运行。如果可能的话,我们可以用lisp吗。?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:34:58 | 显示全部楼层
你好
 
创建阿卡多克。lsp文件(如果它尚未存在于AutoCAD支持文件夹中),然后将代码添加到上述文件中,然后在代码中需要一些代码来检查文件名,如果符合条件,则执行此操作。
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:35:11 | 显示全部楼层
嗨Tharwat
感谢您的回复,如果我将代码添加到acaddoc中。lsp,这将在每次打开我的AutoCAD时运行所有文件,但如果文件名有七位数字(例如1234_A3),则只需要自动运行purge命令。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:38:26 | 显示全部楼层
一个简单的检查(getvar“dwgname”)并查看它是否有一些模式
 
  1. (getvar 'dwgname)
  2. strlen is it 11
  3. subtract .dwg of end dont forget the 4 end characters .dwg
  4. substr in a loop 7 times check each character is it a number
  5. asscii 47-59 is 0-9
  6. Drawing1.dwg is 12 long so Drawing1 is 8 long
回复

使用道具 举报

19

主题

85

帖子

76

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
86
发表于 2022-7-5 15:42:41 | 显示全部楼层
嘿Bigal
你能告诉我密码吗。。我不是Lisp程序的专家。但我有兴趣学习。所以请帮帮我。
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 15:44:46 | 显示全部楼层
这将有助于您的道路:
 
  1. (defun c:tst ( / dwgn letters numbers)
  2. (vl-load-com)
  3. ; dwgname without path and extension
  4. (setq dwgn (vl-filename-base (getvar 'dwgname)))
  5. (princ (strcat "\nDrawing name is : " dwgn))
  6. (princ (strcat "\nDrawing name has " (itoa (strlen dwgn)) " characters"))
  7. ; Total number of letters in filename
  8. (if (> (setq letters (length (vl-remove-if '(lambda(x)(and (< x 58)(> x 47)))(vl-string->list dwgn)))) 0)
  9.    (princ (strcat "\nTotal of letters in drawing name : " (itoa letters)))
  10.    (princ "\nNo letters in dwgname")
  11. )
  12. ; total number of numbers in filename
  13. (if (> (setq numbers (length (vl-remove-if '(lambda(x)(or (< x 48)(> x 57)))(vl-string->list dwgn)))) 0)
  14.    (princ (strcat "\nTotal of numbers in drawing name : " (itoa numbers)))
  15.    (princ "\nNo numbers in dwgname")
  16. )
  17. (princ)
  18. )
  19. ; a few tiny lisp functions for more general use :
  20. ; remove letters from string (ripcar "123abc456def") -> "123456"
  21. (defun ripcar (s)
  22. (vl-list->string (vl-remove-if '(lambda(x)(or (< x 48)(> x 57)))(vl-string->list s))))
  23. ; remove numbers from string (ripnum "123abc456def") -> "abcdef"
  24. (defun ripnum (s)
  25. (vl-list->string (vl-remove-if '(lambda(x)(and (< x 58)(> x 47)))(vl-string->list s))))
Rlx级
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:49:47 | 显示全部楼层
感谢rlx,很好的描述,这个问题可能会导致其他问题,例如清除您无意中删除的dwg。因此,acad1985确保您在开始时有一个continue yes或no,对于您的信息,dcl只支持Ok Cancel按钮,进行漂亮的屏幕输入,而不是键入Y N等。这促使我添加到我的库中。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:52:05 | 显示全部楼层
A是字母而不是数字。
你能解释一下你的不同文件名吗,以便知道当满足某个条件时如何检查和运行程序。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 15:54:44 | 显示全部楼层
你好,rlx,
  1. (length nil) ;; = 0
回复

使用道具 举报

rlx

21

主题

1505

帖子

1551

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
81
发表于 2022-7-5 16:00:06 | 显示全部楼层
 
哦,该死,我刚发完帖子就意识到了这一点,但我希望没人会注意到,但没人能愚弄你。。。哈哈
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 00:15 , Processed in 0.545097 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表