乐筑天下

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

[编程交流] 压缩/简化Lisp

[复制链接]
Aes

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:17:50 | 显示全部楼层 |阅读模式
所以我创建了一个lisp来分解多行文字,然后在分解之前将其对齐到之前的对齐方式。
它工作得很好,运行时间也不长,但我只是想知道是否有更好的方法来编写它。这对我来说似乎很笨拙,我相信有比我的新手尝试更好的方法。
 
  1. (defun c:XtoJ()
  2. (setq UserQA (getvar "QAFLAGS"))
  3. (setvar "QAFLAGS" 1)
  4. (setq topleft (ssget "_X" '((0 . "MTEXT")(71 . 1))))                ;Select TopLeft MTEXT
  5. (command "._explode" topleft "")                                                        ;Explode TopLeft MTEXT
  6. (setq middleleft (ssget "_X" '((0 . "MTEXT")(71 . 4))))        ;Select MiddleLeft MTEXT
  7. (command "._explode" middleleft "")                                                ;Explode MiddleLeft MTEXT
  8. (setq bottomleft (ssget "_X" '((0 . "MTEXT")(71 . 7))))        ;Select BottomLeft MTEXT
  9. (command "._explode" bottomleft "")                                                ;Explode BottomLeft MTEXT
  10. (setq lefttext (ssget "_X" '((0 . "TEXT")(72 . 0))))                ;Select All Left Justified TEXT
  11. (setq topright (ssget "_X" '((0 . "MTEXT")(71 . 3))))                ;TopRight Start
  12. (command "._explode" topright "")                                                        ;TopRight Explode
  13. (setq topright (ssget "_X" '((0 . "TEXT")(72 . 0))))
  14. (command "justifytext" topright "" "R")                                        ;TopRight End
  15. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  16. (setq middleright (ssget "_X" '((0 . "MTEXT")(71 . 6))))        ;MiddleRight Start
  17. (command "._explode" middleright "")                                                ;MiddleRight Explode
  18. (setq middleright (ssget "_X" '((0 . "TEXT")(72 . 0))))
  19. (command "justifytext" middleright "" "R")                                        ;MiddleRight End
  20. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  21. (setq bottomright (ssget "_X" '((0 . "MTEXT")(71 . 9))))        ;BottomRight Start
  22. (command "._explode" bottomright "")                                                ;BottomRight Explode
  23. (setq bottomright (ssget "_X" '((0 . "TEXT")(72 . 0))))
  24. (command "justifytext" bottomright "" "R")                                        ;BottomRight End
  25. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  26. (setq topcenter (ssget "_X" '((0 . "MTEXT")(71 . 2))))                ;TopCenter Start
  27. (command "._explode" topcenter "")                                                        ;TopCenter Explode
  28. (setq topcenter (ssget "_X" '((0 . "TEXT")(72 . 0))))
  29. (command "justifytext" topcenter "" "C")                                        ;TopCenter End
  30. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  31. (setq middlecenter (ssget "_X" '((0 . "MTEXT")(71 . 5))))        ;MiddleCenter Start
  32. (command "._explode" middlecenter "")                                                ;MiddleCenter Explode
  33. (setq middlecenter (ssget "_X" '((0 . "TEXT")(72 . 0))))
  34. (command "justifytext" middlecenter "" "C")                                ;MiddleCenter End
  35. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  36. (setq bottomcenter (ssget "_X" '((0 . "MTEXT")(71 . )))        ;BottomCenter Start
  37. (command "._explode" bottomcenter "")                                                ;BottomCenter Explode
  38. (setq bottomcenter (ssget "_X" '((0 . "TEXT")(72 . 0))))
  39. (command "justifytext" bottomcenter "" "C")                                ;BottomCenter End
  40. (command "justifytext" lefttext "" "L")                                        ;Fix LeftText
  41. (setvar "QAFLAGS" UserQA)
  42. )
回复

使用道具 举报

Aes

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:39:11 | 显示全部楼层
笔记在我的文本编辑器中排列好了,但复制得不是很好。。。我会编辑它,但由于某种原因忘记了如何编辑帖子。
回复

使用道具 举报

Aes

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:55:21 | 显示全部楼层
我稍微修改了一下代码。
回复

使用道具 举报

Aes

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:05:41 | 显示全部楼层
哎呀,我引用了,而不是代码。
  1. (defun c:XtoJ()
  2. (setq UserQA (getvar "QAFLAGS"))
  3. (setvar "QAFLAGS" 1)
  4. (setq topleft (ssget "_X" '((0 . "MTEXT")(71 . 1))))                ;Select TopLeft MTEXT
  5. (command "._explode" topleft "")                                        ;Explode TopLeft MTEXT
  6. (setq middleleft (ssget "_X" '((0 . "MTEXT")(71 . 4))))        ;Select MiddleLeft MTEXT
  7. (command "._explode" middleleft "")                                ;Explode MiddleLeft MTEXT
  8. (setq bottomleft (ssget "_X" '((0 . "MTEXT")(71 . 7))))        ;Select BottomLeft MTEXT
  9. (command "._explode" bottomleft "")                                ;Explode BottomLeft MTEXT
  10. (setq topright (ssget "_X" '((0 . "MTEXT")(71 . 3))))                ;TopRight Start
  11. (command "._explode" topright "")                                ;TopRight Explode
  12. (setq topright (ssget "P"))
  13. (command "justifytext" topright "" "R")                                ;TopRight End
  14. (setq middleright (ssget "_X" '((0 . "MTEXT")(71 . 6))))        ;MiddleRight Start
  15. (command "._explode" middleright "")                                ;MiddleRight Explode
  16. (setq middleright (ssget "P"))
  17. (command "justifytext" middleright "" "R")                        ;MiddleRight End
  18. (setq bottomright (ssget "_X" '((0 . "MTEXT")(71 . 9))))        ;BottomRight Start
  19. (command "._explode" bottomright "")                                ;BottomRight Explode
  20. (setq bottomright (ssget "P"))
  21. (command "justifytext" bottomright "" "R")                        ;BottomRight End
  22. (setq topcenter (ssget "_X" '((0 . "MTEXT")(71 . 2))))        ;TopCenter Start
  23. (command "._explode" topcenter "")                                ;TopCenter Explode
  24. (setq topcenter (ssget "P"))
  25. (command "justifytext" topcenter "" "C")                                ;TopCenter End
  26. (setq middlecenter (ssget "_X" '((0 . "MTEXT")(71 . 5))))        ;MiddleCenter Start
  27. (command "._explode" middlecenter "")                                ;MiddleCenter Explode
  28. (setq middlecenter (ssget "P"))
  29. (command "justifytext" middlecenter "" "C")                        ;MiddleCenter End
  30. (setq bottomcenter (ssget "_X" '((0 . "MTEXT")(71 . )))        ;BottomCenter Start
  31. (command "._explode" bottomcenter "")                                ;BottomCenter Explode
  32. (setq bottomcenter (ssget "P"))
  33. (command "justifytext" bottomcenter "" "C")                        ;BottomCenter End
  34. (setvar "QAFLAGS" UserQA)
  35. )
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 17:31:40 | 显示全部楼层
嗨,AES。
 
编辑消息位于您创建的所有帖子的右下角。另一种选择是制作新帖子,然后抑制旧帖子(再次通过编辑>删除)。
 
删除ssget“text”很好,它删除了一些bug,对吗?
我可以补充一件事,现在您的代码可能按预期工作。。。您不需要在变量中存储“previous”就可以在下一个命令中使用它。按原样使用(你会在我的代码中看到我的意思)。还要注意,我是如何将foreach与一些命令一起使用的,而不是将每组命令重复9次。如果返回一个选择集,我还将所有条件都设为条件。如果将nil作为参数提供,某些命令可能不会爆炸,但最好避免这种情况。它还可以防止无用地执行代码。这可以缩短到这样的程度:
 
  1. ;Jef! 2017-06-12
  2. (defun c:moo ( / tmp)
  3. (foreach itm (list '(1 . "TL") '(2 . "TC") '(3 . "TR")'(4 . "ML") '(5 . "MC") '(6 . "MR")'(7 . "BL") '(8 . "BC") '(9 . "BR"))
  4.           (if (setq tmp (ssget "_X" (list '(0 . "MTEXT")(cons 71 (car itm)))))
  5.               (and  (vl-cmdf "._explode" tmp "")
  6.                     (vl-cmdf "._justifytext" "P" "" (cdr itm))
  7.               )
  8.           )
  9. )
  10. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-12 12:33 , Processed in 1.454634 second(s), 73 queries .

© 2020-2025 乐筑天下

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