(defun fn ( str lst / len )
(setq len (- (cadr lst) (car lst)))
(if (cddr lst)
(strcat (substr str (car lst) len) "-" (fn (substr str (cadr lst)) (mapcar '(lambda ( x ) (- x len)) (cdr lst))))
(substr str (car lst) len)
)
)
_$ s
"AB12345AB1234ABCA123456789-1"
_$ (fn s '(1 3 8 14 17 20 25))
"AB-12345-AB1234-ABC-A12-34567"或者:
(defun fn2 ( str lst / i )
(setq i 0 lst (cdr lst))
(vl-list->string
(apply 'append
(mapcar
'(lambda ( x )
(cond
( (null lst) lst)
( (<= (car lst) (setq i (1+ i)))
(if (setq lst (cdr lst)) (list 45 x))
)
( (list x))
)
)
(vl-string->list str)
)
)
)
)
_$ s
"AB12345AB1234ABCA123456789-1"
_$ (fn2 s '(1 3 8 14 17 20 25))
"AB-12345-AB1234-ABC-A12-34567"
谢谢李!似乎世界上的每一个代码都有你的手,哈哈。非常感谢!这个表达式是针对MacAttEditor和lisp的,我认为它们来自更新标题栏。我会尽快更新我得到这个项目了。谢谢大家的帮助!
谢谢Billy Ray-
您可能希望使用我的批次属性编辑器执行此任务-这是一个最近开发的程序,应该允许您使用现有的DIESEL字段表达式填充属性。
我认为可以安全地假设,如果文件名是28个字符,而不是30个字符,那么它的旧格式,对吗?
我就知道你会把这件事算出来。 我一定会去看看,听起来很棒。再次感谢!
(Defun c:FromLispToTblock ( / acadDocument dwgname breaker)
(setq acadDocument (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq dwgname (vl-filename-base (vla-get-name acadDocument)))
(Setq breaker (if (= (Setq flen (strlen dwgname)) 28)
'((1 2) (3 5) (8 6) (14 3) (17 3) (20 5))
'((1 2) (3 7) (10 6) (16 3) (19 3) (22 5))
)
)
(setq ForTitleBlock
(substr (apply
'strcat (mapcar
'(lambda (n)
(strcat "-" (substr (getvar 'dwgname) (car n) (cadr n)))
) breaker
)
)
2
)
RevisionFromFilename (substr dwgname flen)
)
(list ForTitleBlock Revision)
)
在附图中,“DRAWINGNUMBER”标记从“ForTitleBlock”Lisp变量获取字段值,对于“REV”,标记其“RevisionFromFilename”
HTH公司
编辑:想想看,如果使用lisp代码生成值,那么使用字段是没有意义的
SA2144283FA2006PLCE020103101-1。图纸 看起来您在文件名中的“-”后面拉取版本号。。这里有一种获取信息的方法:
(setq f (vl-filename-base (getvar 'dwgname)))
(if (setq i (vl-string-search "-" f))
(setq rev (substr f (+ 2 i) (strlen f)))
)
谢谢,这很有用。我想添加表达式的主要原因是,如果其他人没有加载自定义表达式,他们可以从库中删除这些表达式并将其插入MAcATTEditor。
谢谢,我会查出来的。
页:
1
[2]