乐筑天下

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

[编程交流] 使用未知ex命名层

[复制链接]

26

主题

149

帖子

127

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
135
发表于 2022-7-6 09:54:46 | 显示全部楼层 |阅读模式
大家好。
 
我制作这些代码是为了制作一个层,但如果层名称已经存在,我不知道如何通过编号给它起一个罕见的名称。
 
例如,我希望这些代码检查层名称“Layer1”是否存在,然后将一个添加到层名称中,成为“Layer2”,如果最后一个也存在,则为“Layer3”
等等
 
但是这些代码中有一些错误,我无法解决。
 
请帮帮我。
 
谢谢你
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 10:01:25 | 显示全部楼层
也许像。。
  1. ((lambda (layName n)
  2. (while (tblsearch "LAYER" layname)
  3.    (setq layName (strcat "LAYER" (itoa (setq n (1+ n)))))
  4. )
  5. (command "_.-layer" "New" layName nil)
  6. (setvar 'cmdecho 1)
  7. )
  8. "LAYER"
  9. (setvar 'cmdecho 0)
  10. )
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:08:29 | 显示全部楼层
试试这个:
 
  1. ;;;     pBe Jan 2011  ;;;
  2. ;;;     ;;;
  3. (defun laysearch (ln)
  4. (setq nmpst 0 [color=blue]ln_lnt (strlen ln))
  5. [/color] (if (setq eln
  6.    (tblsearch "LAYER" ln))
  7. (progn
  8.      (while [color=blue](and
  9.          (= (atoi ln) 0)
  10.              (< nmpst ln_lnt))
  11. [/color]            
  12.         (setq ln (substr ln 2)
  13.        nmpst (1+ nmpst))
  14.          )
  15. (setq ln (strcat (substr (cdr (assoc 2 eln)) 1 nmpst)
  16.      (itoa (+ 1 (atoi ln)))))
  17.    (laysearch ln)
  18.     )
  19. (command "_.layer" "M" ln "")
  20.    )
  21.   )

 
顺便提一下,这是我第一次尝试递归编程。
欢迎提出意见和建议
 
它也只适用于数字后缀
 
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:18:10 | 显示全部楼层
我的版本。辅助函数:
递归搜索:
迭代(如果愿意):
所以你可以这样称呼它:
  1. (command "_.Layer" "_Make" (LayerUnique "Layer1") "")

编辑:上面的效率真的很低。。。我已经看到了两个需要改进的地方:
(1) 迭代不需要在每次迭代时调用LayerSplit。
(2) 获取LayerSplit内的预处理部分可以通过以下方法完成:
  1. (setq pre (substr str 1 n))
而不是while循环。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 10:23:22 | 显示全部楼层
我遇到的问题是,如果层名称有一个数字后缀和层名称中间的一个数字,代码会使用一组特定的规则
 
(laysearch“Spark1”)
层“Spark1”层已创建
(laysearch“Spark1”)
层“Spark2”层已创建
(laysearch“1_Spark”)
层“1_Spark”层已创建
(laysearch“1_Spark”)
已创建层“2”
(laysearch“Spark2\u lite”)
层“Spark2\u lite”层已创建
(laysearch“Spark2\u lite”)
层“Spark3”层已创建
 
真倒霉
 
我想稍加调整就能解决这个问题
 
代码很好Irneb,我还有很长的路要走
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:29:34 | 显示全部楼层
另一个:
 
  1. 8
  1. 9
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:42:01 | 显示全部楼层
太棒了,李!我可以稍微修改一下它以允许命名为Layer001,Layer002?
  1. 10
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:45:59 | 显示全部楼层
 
您必须创建一个函数来解析数字——我的方法假设在字符串的开始/结束处有一个连续的数字部分。
 
 
 
当然,这不是唯一的方法,但我认为最有效的方法——在处理字符串操作时,由于LISP在使用字符串函数时分配内存的方式,转换为列表并再次转换通常是最有效的方法。
 
 
谢谢Irne!当然可以,随意修改
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:50:48 | 显示全部楼层
 
例子:
 
  1. 11
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 10:59:15 | 显示全部楼层
或者只是稍微修改一下:
请注意,它只在名称中使用最后一个连续批次的数字。所以如果你有一个像“Layer03garble056moregarble”这样的名字,它将增加056,而不是03。
 
我想可以用正则表达式,但这个很简单。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:31 , Processed in 3.149785 second(s), 72 queries .

© 2020-2025 乐筑天下

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