明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1341|回复: 3

[讨论] 一个奇怪的问题

[复制链接]
发表于 2014-9-23 02:35:19 | 显示全部楼层 |阅读模式
这是lengyunfeng帮我写的主用备用互相替换的程序:
  • (defun c:zbth (/)
  •   (setq os (getvar "osmode"))
  •   (setvar "osmode" 0)
  •   (setvar "cmdecho" 0)
  •   (princ "\n请选择要替换的文字对象:")
  •   (setq obj (ssget))
  •   (setq        len (sslength obj)
  •         m   0
  •   )
  •   (repeat len
  •     (setq name (ssname obj m))
  •     (setq objdata (entget name))
  •     (setq class (cdr (assoc 0 objdata)))
  •     (if        (or (= class "TEXT") (= class "MTEXT"))
  •       (progn
  •         (setq old (assoc 1 objdata))
  •         (setq old_text (cdr old))
  •         (setq num (strlen old_text))
  •         (setq n        1
  •               new_text ""
  •         )
  •         (while (<= n num)
  •           (setq text (substr old_text n 2))
  •           (if (and (or (= text "主") (= text "备"))
  •                    (= (substr old_text (+ 2 n) 2) "用")
  •               )
  •             (progn
  •               (if (= text "主")
  •                 (setq text "备用")
  •                 (setq text "主用")
  •               )
  •               (setq n (+ n 4))
  •             )
  •             (setq n (+ n 2))
  •           )
  •           (setq new_text (strcat new_text text))
  •         )
  •         (setq new (cons 1 new_text))
  •         (setq objdata (subst new old objdata))
  •         (entmod objdata)
  •       )
  •     )
  •     (setq m (1+ m))
  •   )
  •   (setvar "osmode" os)
  •   (prin1)
  • )

奇怪的是如果在主用或备用的前面是一位数字或一个字母时,程序不起作用。百思不解啊。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-9-23 07:29:26 | 显示全部楼层
1. n=1,3,5...或1,5,9...看SUBSTR怎樣取字,建議用VL-STRING-SEARCH方式
2. 建議SSGET加篩選,程序會簡潔些
发表于 2014-9-23 08:17:44 | 显示全部楼层
;全角字符和半角字符的问题
  1. (defun c:zbth (/)
  2.   (setq os (getvar "osmode"))
  3.   (setvar "osmode" 0)
  4.   (setvar "cmdecho" 0)
  5.   (princ "\n请选择要替换的文字对象:")
  6.   (setq obj (ssget '((0 . "*TEXT"))))
  7.   (repeat (setq m (sslength obj))
  8.     (setq name (ssname obj (setq m (1- m))))
  9.     (setq objdata (entget name))
  10.     (setq class (cdr (assoc 0 objdata)))
  11.     (setq old (assoc 1 objdata))
  12.      (setq old_text (cdr old))
  13.      (setq num (strlen old_text))
  14.      (setq n 1 new_text "")
  15.      (while (<= n num)
  16.       (if (> (ascii(setq text (substr old_text n 1))) 127) (progn
  17.        (setq text (substr old_text n 2))
  18.        (if (and (wcmatch text "主,备") (= (substr old_text (+ 2 n) 2) "用")) (progn
  19.         (setq text (if (= text "主") "备用" "主用"))
  20.         (setq n (+ n 4))
  21.        )
  22.         (setq n (+ n 2))
  23.        )
  24.       )
  25.        (setq n (1+ n))
  26.       )
  27.       (setq new_text (strcat new_text text))
  28.      )
  29.      (entmod (subst (cons 1 new_text) old objdata))
  30.   )
  31.   (setvar "osmode" os)
  32.   (prin1)
  33. )
 楼主| 发表于 2014-9-23 10:41:47 | 显示全部楼层
谢谢两位的解答。我慢慢再对比消化下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 03:03 , Processed in 0.198329 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表