明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9482|回复: 47

[源码] 对文本数字分类求和

  [复制链接]
发表于 2017-11-10 11:36 | 显示全部楼层 |阅读模式
对文本后带数字的文本按前面文本的内容分类对后面的数字进行求和。如下图:


工具用到的正则表达式的函数搬来此处。
  1. ;;--------------------------------------------正则表达式----------------------------------------------------;;
  2. (defun xxexp (pat str key / end)
  3.   ;(princ "\n ★"一刀屠文"(xxexp)(xxexpr) = 对字符串进行正则表达式测试及替换-by 梁雄啸.2007.7")
  4.   (vl-load-com)
  5.   (if (not *xxvbsexp)
  6.     (setq *xxvbsexp (vlax-get-or-create-object "VBScript.RegExp"))
  7.   )
  8.   (vlax-put *xxvbsexp 'Pattern pat)
  9.   (if (not key)(setq key ""))  
  10.   (setq key (strcase key))
  11.   (setq keys '(("I"  "IgnoreCase")("G"  "Global")("M"  "Multiline")))
  12.   (mapcar '(lambda(x)
  13.        (if (wcmatch key (strcat "*" (car x) "*"))
  14.          (vlax-put *xxvbsexp (read(cadr x)) 0)
  15.          (vlax-put *xxvbsexp (read(cadr x)) -1)
  16.          ))
  17.     keys)
  18.   (setq matches (vlax-invoke *xxvbsexp 'Execute str))
  19.   (vlax-for x matches (setq end (cons (vla-get-value x) end)))
  20.   (reverse end)
  21. )
  22. ;;--------------------------------------------end----------------------------------------------------;;



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-15 09:44 | 显示全部楼层
本帖最后由 竹天 于 2021-9-15 09:46 编辑
bai2000 发表于 2017-11-23 10:08
对“2个钉”‘5个钉’之类的统计怎么做?

我这儿需要统计的数字后缀种类不多,用的是这个方法,可以参考下
  1. (defun C:sump                                                ;声明命令名称--sump
  2.         (/ S_list sl i sum n str)                              ;声明局部变量
  3.         (setq S_list (ssget '((0 . "*TEXT")              ;限定被选择的对象为:文字(包括多行文字和天正文字)
  4.                                     (1 . "*#kW,*#KW,*#kw,*#Kw"))));限定被选择的对象为:内容为数字加“kW”(不分大小写)结尾
  5.         (setq sl (sslength S_list))                          ;读取选择集中的对象个数
  6.         (setq i 0)                                                ;将循环标记设置为0
  7.         (setq SUM 0)                                          ;将求和结果设置为0
  8.         (while (< i sl)                                         ;开始循环
  9.                 (setq n (ssname S_list i))                 ;取出选择集中第i个文字的对象名称
  10.                 (setq str (cdr (assoc 1 (entget n))))   ;提取当前文字的内容
  11.                 (setq SUM (+ SUM (atof str)))          ;累加
  12.                 (setq i (1+ i)))                                ;更新循环标志
  13.         (princ "\n功率总和为:")                          ;提示将要输出的内容
  14.         (princ SUM)                                            ;输出求和结果      
  15.         (princ "kW")                                           ;输出单位      
  16.         (prin1)
  17. )

发表于 2021-9-11 21:13 | 显示全部楼层
兄弟,你那gfsum怎么加载,附件加载选择对象后没有反应,和帖子上兄弟说的一样,出现一串英文。将正则表达式粘贴到附件上则提示没有这命令。请教如何加载,本人不懂lisp。但非常喜欢这插件,功能非常有用。麻烦指点下,谢谢!
发表于 2020-8-17 22:51 来自手机 | 显示全部楼层
ml2513 发表于 2018-2-27 09:22
谢谢,可以使用。
请教楼主,如果文本字母后面想加数字,然后合计。表达式应该怎么修改。

我也想问这个问题,会了麻烦联系一下我1156999411,有谢
发表于 2017-11-22 16:08 | 显示全部楼层
统计的文本要是能生成表格就更好了,谢谢楼主分享
发表于 2017-11-23 10:08 | 显示全部楼层
对“2个钉”‘5个钉’之类的统计怎么做?
发表于 2018-1-23 16:42 | 显示全部楼层
非常非常好!!!很实用!!!
发表于 2018-2-15 01:08 | 显示全部楼层
你好,使用后出现下面的情况?》no function definition: XXEXP

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2018-2-22 13:27 | 显示全部楼层
ml2513 发表于 2018-2-15 01:08
你好,使用后出现下面的情况?》no function definition: XXEXP

见贴子后给出的函数
发表于 2018-2-22 20:04 | 显示全部楼层
springwillow 发表于 2018-2-22 13:27
见贴子后给出的函数

我是新手,还不明白,不过谢谢您了。
发表于 2018-2-26 12:50 | 显示全部楼层
CAD2006 用不了
 楼主| 发表于 2018-2-27 08:17 | 显示全部楼层

把正则函数粘到程序开头
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 16:57 , Processed in 0.204792 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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