jamathi 发表于 2022-7-6 11:39:03

查找和替换自动化--N

大家好,
 
我画的是一系列不同的部分,这些部分逐渐增加。我手动放置它们,并用1-1-K001这样的标签对它们进行编号,下一个将是1-1-K002。问题是,有时会插入一个部分,而所有后续部分都需要增加一个。我正在搜索一个Lisp程序,但没有找到一个这样做。最好有一个Lisp,它可以同时查找和替换所有50个部分,并将数字提高1位,或者可以引用一个excel文件,该文件在“查找值”列中有一个列表,后面有一个替换值列。
 
任何帮助都将不胜感激。
 
 
这里有一个类似的帖子:
http://www.cadtutor.net/forum/showthread.php?t=43306&highlight=INCREMENT

Lee Mac 发表于 2022-7-6 11:54:28

试试这个(当然是在图纸副本上):
 

(defun c:BumpUp (/ ELST ENT I NUM SEARCH SS STR)

(setq search "1-1-K*")

(if (setq i -1 ss (ssget "_X" '((0 . "TEXT,MTEXT"))))
   (while (setq ent (ssname ss (setq i (1+ i))))
   (if (wcmatch
         (strcase
             (setq str
               (cdr (assoc 1 (setq eLst (entget ent))))))

         (strcase search))
      
       (progn

         (if (setq num (atoi (substr str 6)))
         (progn
             (setq num (itoa (1+ num)))

             (while (< (strlen num) 3)
               (setq num (strcat "0" num)))

             (entmod
               (subst
               (cons 1 (strcat (substr str 1 (- (strlen str) 3)) num))
                   (assoc 1 eLst) eLst))))))))
(princ))
            

jamathi 发表于 2022-7-6 12:14:11

非常感谢。
 
您发布的Lisp可以完美地增加整个图形的数字。如果我需要有选择地去做,我该怎么做呢。例如,在1-1-K035处插入零件,我只需要放大1-1-K035及以上的零件。数字也是增强属性的一部分。上面的lisp似乎只适用于文本。
 
谢谢

Lee Mac 发表于 2022-7-6 12:22:32

试试这个:
 

(defun c:BumpUp (/ ELST ENT I NUM SEARCH SS STR)

(setq search "1-1-K*")

(if (setq i -1 ss (ssget "_:L" '((-4 . "<OR")
                                    (0 . "TEXT,MTEXT")
                                    (-4 . "<AND")
                                    (0 . "INSERT")
                                    (66 . 1)
                                    (-4 . "AND>")
                                  (-4 . "OR>"))))
   
   (while (setq ent (ssname ss (setq i (1+ i))))

   (cond ((eq "INSERT" (cdr (assoc 0 (entget ent))))

            (while (not (eq "SEQEND"
                              (cdr (assoc 0 (entget
                                              (setq ent
                                                (entnext ent)))))))
                (if (wcmatch
                      (strcase
                        (setq str
                        (cdr (assoc 1 (setq eLst (entget ent))))))
                     
                      (strcase search))

                  (if (setq num (atoi (substr str 6)))
                  (progn
                      (setq num (itoa (1+ num)))

                      (while (< (strlen num) 3)
                        (setq num (strcat "0" num)))

                      (entupd
                        (cdr (assoc -1
                               (entmod
                                 (subst
                                 (cons 1 (strcat
                                             (substr str 1
                                                   (- (strlen str) 3)) num))
                                 
                                     (assoc 1 eLst) eLst))))))))))

         (t (if (wcmatch
                  (strcase
                      (setq str
                           (cdr (assoc 1 (setq eLst (entget ent))))))
                  
                  (strcase search))

                (if (setq num (atoi (substr str 6)))
                  (progn
                  (setq num (itoa (1+ num)))
                  
                  (while (< (strlen num) 3)
                      (setq num (strcat "0" num)))

                  (entupd
                      (cdr (assoc -1
                           (entmod
                               (subst
                                 (cons 1 (strcat (substr str 1 (- (strlen str) 3)) num))
                                 (assoc 1 eLst) eLst))))))))))))
(princ))

jamathi 发表于 2022-7-6 12:29:18

伙计,这真是太好了。非常感谢你。
 
我会尽我所能支持该网站。

Lee Mac 发表于 2022-7-6 12:46:29

 
不客气,Jamathi,谢谢
页: [1]
查看完整版本: 查找和替换自动化--N