zhengchuan 发表于 2014-9-23 02:35:19

一个奇怪的问题

这是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)

奇怪的是如果在主用或备用的前面是一位数字或一个字母时,程序不起作用。百思不解啊。

lsjj 发表于 2014-9-23 07:29:26

1. n=1,3,5...或1,5,9...看SUBSTR怎樣取字,建議用VL-STRING-SEARCH方式
2. 建議SSGET加篩選,程序會簡潔些

ZZXXQQ 发表于 2014-9-23 08:17:44

;全角字符和半角字符的问题(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)
)

zhengchuan 发表于 2014-9-23 10:41:47

谢谢两位的解答。我慢慢再对比消化下。
页: [1]
查看完整版本: 一个奇怪的问题