求助文字替换内容的问题
各位:你好!
在lisp中编一个文字替换的程序, 如下:
(defun C:Rt ()
(setvar "cmdecho" 0)
(setq en (entget (car (entsel "please select soure text:"))))
(setq el (ssget))
(setq l 0
n (sslength el)
)
(while (< l n)
(if (= "text"
(setq dat (ssname el l))
(setq ed (cons dat ed))
(setq tdat (entget (car ed)))
(setq vtxt (cdr (assoc 1 tdat)))
(setq stxt (cdr (assoc 1 en)))
(setq e (subst stxt vtxt tdat))
(entmod e)
)
(setq l (1+ l)
)
)
有二个问题:
1.循环语句有问题.
2.subst语法问题.不知为什么用subst就是不行.
请各位指教.谢谢. (defun C:Rt ()
(setvar "cmdecho" 0)
(setq en (entget (car (entsel "please select soure text:"))))
(setq el (ssget ' ((0 . "text"))))
(setq l 0
n (sslength el)
)
(while (< l n)
(setq dat (ssname el l))
(setq tdat (entget dat))
(setq vtxt (assoc 1 tdat))
(setq stxt (assoc 1 en))
(setq tdat (subst stxt vtxt tdat))
(entmod tdat)
(setq l (1+ l))
)
(princ)
) subst 后面必须是点对序列 谢谢。 给你个建议 我个人认为 能在循环外执行的语句最好不要放在循环里面去如
(setq stxt (assoc 1 en)) 是个好建议。 看看这个:
(defun C:Rt (/ en el l n restxt dat)
(setvar "cmdecho" 0)
(setq en (car (entsel "please select soure text:")))
(setq el (ssget '((0 . "*text"))))
(setq l 0
n (sslength el)
)
(setq restxt (vla-get-TextString (vlax-ename->vla-object en)))
(while (< l n)
(setq dat (ssname el l))
(vla-put-TextString (vlax-ename->vla-object dat) restxt)
(setq l (1+ l))
)
(princ)
)
TO楼主:应该把某些变量高为局部变量。
页:
[1]