明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5786|回复: 14

求高手出马,对单行文字,删除后缀,并加前缀

  [复制链接]
发表于 2012-6-28 10:25 | 显示全部楼层 |阅读模式
1明经币
本帖最后由 xyxy 于 2012-6-28 11:02 编辑

请高手出马!
程序要求,输入命令后,程序自动完成以下动作。先自动选择cad中含有以“yz”结尾的单行文字(如123yz,acd2yz,789513yz等),然后针对此选择集删除后缀“yz”,并加上前缀“xy”。如123yz变成xy123,acd2yz变成xyacd2,789513yz变成xy789513。谢谢!
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

只通过附件之调试
发表于 2012-6-28 10:25 | 显示全部楼层
只通过附件之调试

  1. (defun C:xy7yz ()
  2.   (setq ss (ssget "X" '((0 . "TEXT") (1 . "*yz")))
  3.         i  0
  4.   )

  5.   (while (setq ee (ssname ss i))
  6.     (setq obj (vlax-ename->vla-object ee)
  7.           txt (vla-get-textstring obj)
  8.           txt (vl-string-subst "" "yz" txt)
  9.           i   (1+ i)
  10.     )
  11.     (vla-put-textstring obj (strcat "xy" txt))
  12.   )
  13. )

点评

长老能写个这样的小程序吗?框选几个编号,把编号的尾数统一变成输入数值。比如JL-1、WL-1,框选后输入2,则两个编号变成JL-2、WL-2  发表于 2012-9-25 08:26
谢谢热心的Andyhon长老,程序很给力!  发表于 2012-6-28 13:56
回复

使用道具 举报

发表于 2012-6-28 10:46 | 显示全部楼层
简单査看子符串函数,选择集组码1 .  写成   *YZ
回复

使用道具 举报

发表于 2012-6-28 10:46 | 显示全部楼层
请附上调试用的对映文件(Dwg)
回复

使用道具 举报

 楼主| 发表于 2012-6-28 11:04 | 显示全部楼层
Andyhon 发表于 2012-6-28 10:46
请附上调试用的对映文件(Dwg)

Andyhon你好,附件已上传,请下载,非常感谢出手相助!
回复

使用道具 举报

发表于 2012-6-28 11:48 | 显示全部楼层
我也简单写了一个,方法较笨
  1. (defun c:ss(/ n ss ssna sslst str strnew strnew2 sslst2)
  2.   (setq n 0)
  3.   (if (setq ss (ssget "x" '((0 . "text") (1 . "*yz"))))
  4.       (repeat (sslength ss)
  5.         (setq ssna (ssname ss n))
  6.         (setq sslst (entget ssna))
  7.         (setq str (cdr (assoc '1 sslst)))
  8.         (setq strnew (vl-string-right-trim "yz" str))
  9.         (setq strnew2 (strcat "xy" strnew))
  10.         (setq sslst2 (subst (cons 1 strnew2) (assoc '1 sslst) sslst))
  11.         (entmod sslst2)
  12.         (entupd ssna)
  13.         (setq n (1+ n))
  14.       )
  15.   )
  16.   (princ)
  17. )
  18. (prompt "\n程序运行命令为ss")

评分

参与人数 1明经币 +1 收起 理由
xyxy + 1 zyhandw大侠的程序也很给力!

查看全部评分

回复

使用道具 举报

发表于 2012-9-25 08:47 | 显示全部楼层
;;; 比如JL-1、WL-1,框选后输入2,则两个编号变成JL-2、WL-2

  1. (defun C:str-NewN ()
  2.   (setq ss (ssget "X" '((0 . "TEXT") (1 . "*-#")))
  3.        Num (getstring "\n新的编号: ")
  4.         i  0
  5.   )

  6.   (while (setq ee (ssname ss i))
  7.     (setq obj (vlax-ename->vla-object ee)
  8.           txt (vla-get-textstring obj)
  9.           txt (reverse (vl-string->list txt))
  10.           txt (vl-list->string (reverse (cdr txt)))
  11.           i   (1+ i)
  12.     )
  13.     (vla-put-textstring obj (strcat txt Num))
  14.   )
  15. )
回复

使用道具 举报

发表于 2012-9-25 14:39 | 显示全部楼层
Andyhon 发表于 2012-9-25 08:47
;;; 比如JL-1、WL-1,框选后输入2,则两个编号变成JL-2、WL-2

怎么不能选择呢?

点评

应是需求有所不同之故,得量身修订  发表于 2012-10-17 21:02
回复

使用道具 举报

发表于 2012-10-17 19:52 | 显示全部楼层
不用选择了,全图纸中的全改完成了!
默认的全图纸中的文字
回复

使用道具 举报

发表于 2012-10-24 11:18 | 显示全部楼层
来个加前缀和后缀一起的
                    ;文字加前缀或后缀
(defun C:adt (/ i ss qh ee obj txt)
  (setq i 0)
  (if (setq ss (ssget '((0 . "TEXT"))))
    (progn
      (INITGET "A B NIL")
      (setq qh(getkword "\n前缀<A>\后缀<B>:<A>"))
                 (if (not qh)
                   (setq qh  "A" str (getstring "\n输入前缀:") )
                   (setq qh  "B" str (getstring "\n输入后缀:"))

                   )
                   (while(setq ee (ssname ss i))
                        (setq obj (vlax-ename->vla-object ee) txt (vla-get-textstring obj) i   (1+ i))
                                   (vla-put-textstring obj
                                     (cond ((= "A" qh) (strcat str txt))
                                           ((= "B" qh) (strcat txt str))
                                           )
                                     )
                                   )
                 )
           )
    )
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 18:23 , Processed in 0.406683 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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