乐筑天下

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

[编程交流] 协助更新Lisp routi

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:35:42 | 显示全部楼层
由于提取的子字符串连续出现在原始字符串中,因此您可以设计一个函数,该函数将接受单个字符断点列表,例如:
  1. (defun fn ( str lst / len )
  2.    (setq len (- (cadr lst) (car lst)))
  3.    (if (cddr lst)
  4.        (strcat (substr str (car lst) len) "-" (fn (substr str (cadr lst)) (mapcar '(lambda ( x ) (- x len)) (cdr lst))))
  5.        (substr str (car lst) len)
  6.    )
  7. )
  1. _$ s
  2. "AB12345AB1234ABCA123456789-1"
  3. _$ (fn s '(1 3 8 14 17 20 25))
  4. "AB-12345-AB1234-ABC-A12-34567"
或者:
  1. (defun fn2 ( str lst / i )
  2.    (setq i 0 lst (cdr lst))
  3.    (vl-list->string
  4.        (apply 'append
  5.            (mapcar
  6.               '(lambda ( x )
  7.                    (cond
  8.                        (   (null lst) lst)
  9.                        (   (<= (car lst) (setq i (1+ i)))
  10.                            (if (setq lst (cdr lst)) (list 45 x))
  11.                        )
  12.                        (   (list x))
  13.                    )
  14.                )
  15.                (vl-string->list str)
  16.            )
  17.        )
  18.    )
  19. )
  1. _$ s
  2. "AB12345AB1234ABCA123456789-1"
  3. _$ (fn2 s '(1 3 8 14 17 20 25))
  4. "AB-12345-AB1234-ABC-A12-34567"
回复

使用道具 举报

5

主题

33

帖子

28

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:40:05 | 显示全部楼层
 
谢谢李!似乎世界上的每一个代码都有你的手,哈哈。非常感谢!这个表达式是针对MacAttEditor和lisp的,我认为它们来自更新标题栏。我会尽快更新我得到这个项目了。谢谢大家的帮助!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:42:39 | 显示全部楼层
 
谢谢Billy Ray-
 
您可能希望使用我的批次属性编辑器执行此任务-这是一个最近开发的程序,应该允许您使用现有的DIESEL字段表达式填充属性。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 15:46:01 | 显示全部楼层
 
我认为可以安全地假设,如果文件名是28个字符,而不是30个字符,那么它的旧格式,对吗?
 
 
我就知道你会把这件事算出来。
回复

使用道具 举报

5

主题

33

帖子

28

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 15:49:07 | 显示全部楼层
我一定会去看看,听起来很棒。再次感谢!
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-5 15:50:53 | 显示全部楼层
  1. (Defun c:FromLispToTblock ( / acadDocument dwgname breaker)
  2. (setq acadDocument (vla-get-ActiveDocument (vlax-get-acad-object)))
  3. (setq dwgname (vl-filename-base (vla-get-name acadDocument)))
  4. (Setq breaker (if (= (Setq flen (strlen dwgname)) 28)
  5.                        '((1 2) (3 5) (8 6) (14 3) (17 3) (20 5))
  6.                        '((1 2) (3 7) (10 6) (16 3) (19 3) (22 5))
  7.                 )
  8.   )
  9.          
  10.        (setq ForTitleBlock   
  11.         (substr (apply
  12.             'strcat (mapcar
  13.               '(lambda (n)
  14.                  (strcat "-" (substr (getvar 'dwgname) (car n) (cadr n)))
  15.                  ) breaker             
  16.               )
  17.             )
  18.           2
  19.           )
  20.                  RevisionFromFilename (substr dwgname flen)
  21.                  )
  22.         (list ForTitleBlock Revision)
  23. )

 
在附图[SA2144283FA2006PLCE02010301-1.dwg]中,“DRAWINGNUMBER”标记从“ForTitleBlock”Lisp变量获取字段值,对于“REV”,标记其“RevisionFromFilename”
 
 
HTH公司
 
编辑:想想看,如果使用lisp代码生成值,那么使用字段是没有意义的
SA2144283FA2006PLCE020103101-1。图纸
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:58:19 | 显示全部楼层
看起来您在文件名中的“-”后面拉取版本号。。这里有一种获取信息的方法:
  1. (setq f (vl-filename-base (getvar 'dwgname)))
  2. (if (setq i (vl-string-search "-" f))
  3. (setq rev (substr f (+ 2 i) (strlen f)))
  4. )
回复

使用道具 举报

5

主题

33

帖子

28

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 16:00:52 | 显示全部楼层
 
谢谢,这很有用。我想添加表达式的主要原因是,如果其他人没有加载自定义表达式,他们可以从库中删除这些表达式并将其插入MAcATTEditor。
回复

使用道具 举报

5

主题

33

帖子

28

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 16:03:47 | 显示全部楼层
 
谢谢,我会查出来的。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 03:32 , Processed in 2.155091 second(s), 68 queries .

© 2020-2025 乐筑天下

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