一个奇怪的问题
这是lengyunfeng帮我写的主用备用互相替换的程序:[*](defun c:zbth (/)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setq os (getvar "osmode"))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setvar "osmode" 0)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setvar "cmdecho" 0)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(princ "\n请选择要替换的文字对象:")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setq obj (ssget))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setq len (sslength obj)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif m 0
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(repeat len
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq name (ssname obj m))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq objdata (entget name))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq class (cdr (assoc 0 objdata)))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if (or (= class "TEXT") (= class "MTEXT"))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (progn
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq old (assoc 1 objdata))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq old_text (cdr old))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq num (strlen old_text))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq n 1
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif new_text ""
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (while (<= n num)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq text (substr old_text n 2))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if (and (or (= text "主") (= text "备"))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (= (substr old_text (+ 2 n) 2) "用")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (progn
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (if (= text "主")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq text "备用")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq text "主用")
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq n (+ n 4))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq n (+ n 2))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq new_text (strcat new_text text))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq new (cons 1 new_text))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq objdata (subst new old objdata))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (entmod objdata)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif )
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif (setq m (1+ m))
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(setvar "osmode" os)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif(prin1)
[*]http://bbs.mjtd.com/source/plugin/imc_colorcode/images/jssc_none.gif)
奇怪的是如果在主用或备用的前面是一位数字或一个字母时,程序不起作用。百思不解啊。
1. n=1,3,5...或1,5,9...看SUBSTR怎樣取字,建議用VL-STRING-SEARCH方式
2. 建議SSGET加篩選,程序會簡潔些 ;全角字符和半角字符的问题(defun c:zbth (/)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(princ "\n请选择要替换的文字对象:")
(setq obj (ssget '((0 . "*TEXT"))))
(repeat (setq m (sslength obj))
(setq name (ssname obj (setq m (1- m))))
(setq objdata (entget name))
(setq class (cdr (assoc 0 objdata)))
(setq old (assoc 1 objdata))
(setq old_text (cdr old))
(setq num (strlen old_text))
(setq n 1 new_text "")
(while (<= n num)
(if (> (ascii(setq text (substr old_text n 1))) 127) (progn
(setq text (substr old_text n 2))
(if (and (wcmatch text "主,备") (= (substr old_text (+ 2 n) 2) "用")) (progn
(setq text (if (= text "主") "备用" "主用"))
(setq n (+ n 4))
)
(setq n (+ n 2))
)
)
(setq n (1+ n))
)
(setq new_text (strcat new_text text))
)
(entmod (subst (cons 1 new_text) old objdata))
)
(setvar "osmode" os)
(prin1)
)
谢谢两位的解答。我慢慢再对比消化下。
页:
[1]