Lee Mac 发表于 2022-7-5 15:35:42

由于提取的子字符串连续出现在原始字符串中,因此您可以设计一个函数,该函数将接受单个字符断点列表,例如:
(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"

Billy Ray 发表于 2022-7-5 15:40:05

 
谢谢李!似乎世界上的每一个代码都有你的手,哈哈。非常感谢!这个表达式是针对MacAttEditor和lisp的,我认为它们来自更新标题栏。我会尽快更新我得到这个项目了。谢谢大家的帮助!

Lee Mac 发表于 2022-7-5 15:42:39

 
谢谢Billy Ray-
 
您可能希望使用我的批次属性编辑器执行此任务-这是一个最近开发的程序,应该允许您使用现有的DIESEL字段表达式填充属性。

pBe 发表于 2022-7-5 15:46:01

 
我认为可以安全地假设,如果文件名是28个字符,而不是30个字符,那么它的旧格式,对吗?
 
 
我就知道你会把这件事算出来。

Billy Ray 发表于 2022-7-5 15:49:07

我一定会去看看,听起来很棒。再次感谢!

pBe 发表于 2022-7-5 15:50:53


(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。图纸

ronjonp 发表于 2022-7-5 15:58:19

看起来您在文件名中的“-”后面拉取版本号。。这里有一种获取信息的方法:
(setq f (vl-filename-base (getvar 'dwgname)))
(if (setq i (vl-string-search "-" f))
(setq rev (substr f (+ 2 i) (strlen f)))
)

Billy Ray 发表于 2022-7-5 16:00:52

 
谢谢,这很有用。我想添加表达式的主要原因是,如果其他人没有加载自定义表达式,他们可以从库中删除这些表达式并将其插入MAcATTEditor。

Billy Ray 发表于 2022-7-5 16:03:47

 
谢谢,我会查出来的。
页: 1 [2]
查看完整版本: 协助更新Lisp routi