xiagood 发表于 2003-12-13 11:02:00

求助文字替换内容的问题

各位:
   你好!
   在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就是不行.
请各位指教.谢谢.

呆呆 发表于 2003-12-13 11:21:00

(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)
)

呆呆 发表于 2003-12-13 11:23:00

subst 后面必须是点对序列

xiagood 发表于 2003-12-13 11:29:00

谢谢。

呆呆 发表于 2003-12-13 12:38:00

给你个建议 我个人认为 能在循环外执行的语句最好不要放在循环里面去如
(setq stxt (assoc 1 en))

lockmyeye 发表于 2003-12-13 23:35:00

是个好建议。

tukuitk 发表于 2003-12-18 13:00:00

看看这个:
(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]
查看完整版本: 求助文字替换内容的问题