wimal 发表于 2022-7-5 18:34:33

在dded中选择指定文本

我已经写了几个地方,我的画以下文本
MDB/L7/Z1/M1/2L3
MDB/L7/Z1/M1/2L2
EMDB/L7/Z1/M1/2L3
EMDB/L7/Z1/M1/2L2
发射型计算机断层扫描仪。
 
我需要在下一张图纸中将这个L7改为L4。
在DDEDIT对话框中是否有工具或lisp代码可以立即选择此L7。
然后我可以输入L4代替L7。

rlx 发表于 2022-7-5 18:40:54

 
 
我的vt.lsp和ct。lsp可以做到这一点,李·麦克也有大量的实用程序来完成这项工作。只需搜索此论坛。
 
 
gr.Rlx

Tharwat 发表于 2022-7-5 18:44:36

这应该会更改选定文本中的第一个L7。
 

(defun c:Test (/ ss sn p st e )
;; Tharwat 29.9.2015 ;;
(if (setq ss (ssget "_:L" '((0 . "TEXT")(1 . "*L7*"))))
(while (setq sn (ssname ss 0))
   (if (setq p (vl-string-search "L7" (setq st (cdr (assoc 1 (setq e (entget sn)))))))
   (entmod (subst (cons 1 (strcat (substr st 1 p) "L4" (substr st (+ 3 p)))) (assoc 1 e) e))
   )
   (ssdel sn ss)
   )
)
(princ)
)

mostafa badran 发表于 2022-7-5 18:51:24

这是指在其他封闭图纸中还是在同一图纸中?

wimal 发表于 2022-7-5 18:55:31

谢谢以上代码比我预期的更符合我的要求。

wimal 发表于 2022-7-5 18:59:52

 
我指的是另一张公开画。

mostafa badran 发表于 2022-7-5 19:05:16

所以我推荐你这个李·麦克的Lisp程序。
http://lee-mac.com/bfind.html

Tharwat 发表于 2022-7-5 19:07:44

不客气。

Lee Mac 发表于 2022-7-5 19:15:52

 
好东西Tharwat-虽然是一个小建议,但由于您限制了原始选择,可以保证模式会出现,因此简单的vl字符串subst就足够了,例如:
(defun c:test ( / e i s x )
   (if (setq s (ssget "_:L" '((0 . "TEXT") (1 . "*L7*"))))
       (repeat (setq i (sslength s))
         (setq e (entget (ssname s (setq i (1- i))))
               x (assoc 1 e)
         )
         (entmod (subst (cons 1 (vl-string-subst "L4" "L7" (cdr x))) x e))
       )
   )
   (princ)
)
 
 
非常感谢大家的推荐!

Tharwat 发表于 2022-7-5 19:19:54

李,是的,你是对的。
老实说,当我编写这些简单的代码时,我就意识到了这一点,只要不造成伤害,我就不会删除模式上的检查。
 
谢谢
页: [1] 2
查看完整版本: 在dded中选择指定文本