找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 844|回复: 13

[已解决] 如何批量查到单行文字 并将其中的数字统一加值

[复制链接]

已领礼包: 20个

财富等级: 恭喜发财

发表于 2016-10-22 10:37:45 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
各位大神 我是一个CAD开发初学者  有个问题想请问一下  因为我传不了图片  就用文字简单描述一下  
加入我的CAD图里有一下三个单行文字:X=2300 X=4500 X=7900
我想批量的查找到这几个单行文字(图里可能还有其他带X的单行文字 )  并将这几个单行文字中的数字统一加上1000 变为
X=3300 X=5500 X=8900
功能感觉不复杂  但是作为一个入门者 还是摸不着思路 请大神指教

最佳答案

查看完整内容

把getint改成getstring就行了 代码修改了,下面代码把变的文字改成红色 你想改别的颜色,修改 vla-put-color 后面的颜色号 (defun c:tt () (if (and (/= "" (setq str (getstring "\n输入数字前缀:"))) (/= "" (setq val (getstring "\n增加多少?"))) (xd::string:regexps "^\\d+$" val "") (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" str "*"))))) ) (progn (setq i -1) (repea ...

评分

参与人数 1D豆 +5 收起 理由
newer + 5 有始有终奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 10:37:46 | 显示全部楼层

把getint改成getstring就行了
代码修改了,下面代码把变的文字改成红色

你想改别的颜色,修改 vla-put-color 后面的颜色号

(defun c:tt ()
  (if (and
        (/= "" (setq str (getstring "\n输入数字前缀<退出>:")))
        (/= "" (setq val (getstring "\n增加多少?")))
        (xd::string:regexps "^\\d+$" val "")
        (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" str "*")))))
      )
    (progn
      (setq i -1)
      (repeat (sslength ss)
        (setq e (ssname ss (setq i (1+ i)))
              ed (entget e)
              txt (cdr (assoc 1 ed))
        )
        (if (setq cur (xd::string:regexps (strcat str "\\d+") txt "")) ; 正?
                                       ; 虮泶锸阶址?ヅ洳檎倚稳纾?Y=\\d+"
                                       ; 字符串Y=后加整数
          (progn
            (setq cur (car cur)               ; 匹配到的前缀和数字
                  num (substr cur (1+ (strlen str))) ; 数字字符串
                  txt (vl-string-subst (strcat str (itoa (+ (atoi num)
                                                            (atoi val)
                                                         )
                                                   )
                                       ) cur txt
                      )                       ; 递增后的字符串
            )
            (setq ed (subst
                       (cons 1 txt)
                       (assoc 1 ed)
                       ed
                     )
            )
            (entmod ed)
            (vla-put-color (vlax-ename->vla-object e) 1)
          )
        )
      )
    )
  )
  (princ)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-10-22 10:45:38 | 显示全部楼层

                               
登录/注册后可看大图



http://bbs.xdcad.net/thread-704575-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3个

财富等级: 恭喜发财

发表于 2016-10-22 10:53:44 | 显示全部楼层
难道CAD中还可以编程?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 11:28:39 | 显示全部楼层
你这个几个文字是整体,还是在一个文字的的一部分?

用 (SSGET '((0 . "TEXT")(1 . "*X=*")))  选择带 X=xxxxx的文字,然后循环处理每个单行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 14:09:59 | 显示全部楼层
试下

正则表达式字符串匹配函数 xd::string:regexps 见开源函数库 http://bbs.xdcad.net/thread-669166-1-1.html

去了解下正则表达式,xd::string:regexps 这个函数是个万能的字符串查询函数,可以任意构造出你需要的查询

字符串数字增加.gif

(defun c:tt ()
  (if (and
        (/= "" (setq str (getstring "\n输入数字前缀<退出>:")))
        (setq val (getint "\n增加多少?"))
        (setq ss (ssget (list '(0 . "TEXT") (cons 1 (strcat "*" str "*")))))
      )
    (progn
      (setq i -1)
      (repeat (sslength ss)
        (setq e (ssname ss (setq i (1+ i)))
              ed (entget e)
              txt (cdr (assoc 1 ed))
        )
        (if (setq cur (xd::string:regexps (strcat str "\\d+") txt "")) ;;正则表达式字符匹配查找形如:"Y=\\d+" 字符串Y=后加整数
          (progn
            (setq cur (car cur);;匹配到的前缀和数字
                  num (substr cur (1+ (strlen str)));;数字字符串
                  txt (vl-string-subst (strcat str (itoa (+ (atoi num) val))) cur txt) ;;递增后的字符串
            )
            (setq ed (subst (cons 1 txt) (assoc 1 ed) ed))
            (entmod ed)
          )
        )
      )
    )
  )
  (princ)
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-22 16:19:58 | 显示全部楼层

这是我把源代码复制下来 做成lsp执行后的结果  最后提示错误 没有执行成功  这是什么原因啊
----------------------------------------------------------------------------------------------------------------
命令: TT
输入数字前缀<退出>:X
增加多少?100
选择对象: 指定对角点: 找到 1 个
选择对象:  ; 错误: no function definition: XD::STRING:REGEXPS
----------------------------------------------------------------------------------------------------------------

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 16:43:31 | 显示全部楼层

上面的帖子,我给你了 xd::string:regexps 函数的链接了,你去帖子里面拷贝回去。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-22 17:10:32 | 显示全部楼层
具体怎么弄啊  指点一下吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-22 18:02:28 | 显示全部楼层

你不是 开发 的 初学者吗?

加载代码都不会吗?

上面你不是贴出来运行提示错误吗,代码你是怎么加载的?

你去我上面帖子里面给你的连接,点击进去,  把帖子里面的 函数 代码  拷贝回去, 和上面写的测试代码拷贝到一个文件里面保存。 然后加载。

如果还不会, 那你去下载  XDRX API,  执行安装程序,安装后, 启动CAD,加载上面的代码。

我上面告诉你的函数 XD::STRING:REGEXPS 本来是VLISP的,不需要XDRX API的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-22 21:12:31 | 显示全部楼层

嘿嘿  可以了  但是只能增加-32768到32767之间的数  如果想增加更大的数该怎么办呢   还有我想把加过数字的单行文字变成另一种颜色  该怎么实现啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-23 11:32:02 | 显示全部楼层

两个字“完美~~~~” 哈哈  版主 咱们有专门的沟通用的群吗 微信或者QQ 昨天关注公众号 说公众号暂时无法使用
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2016-10-23 13:36:04 | 显示全部楼层

完美了,你到那个解决问题的帖子,点右下角,设为 最佳答案, 把这个帖子结了吧。别只悬赏不付人家D豆。
有问题就贴论坛吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

 楼主| 发表于 2016-10-24 08:09:21 | 显示全部楼层

不好意思 刚来 哈哈
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 03:30 , Processed in 0.200325 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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