springwillow 发表于 2017-11-10 11:36:39

对文本数字分类求和

对文本后带数字的文本按前面文本的内容分类对后面的数字进行求和。如下图:


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


竹天 发表于 2021-9-15 09:44:49

本帖最后由 竹天 于 2021-9-15 09:46 编辑

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

jhzxj 发表于 2021-9-11 21:13:17

兄弟,你那gfsum怎么加载,附件加载选择对象后没有反应,和帖子上兄弟说的一样,出现一串英文。将正则表达式粘贴到附件上则提示没有这命令。请教如何加载,本人不懂lisp。但非常喜欢这插件,功能非常有用。麻烦指点下,谢谢!

shouerdekafei 发表于 2020-8-17 22:51:17

ml2513 发表于 2018-2-27 09:22
谢谢,可以使用。
请教楼主,如果文本字母后面想加数字,然后合计。表达式应该怎么修改。

我也想问这个问题,会了麻烦联系一下我1156999411,有谢

又是明天 发表于 2017-11-20 17:23:22

谢谢分享!!!

lizhiqiang9801 发表于 2017-11-22 16:08:31

统计的文本要是能生成表格就更好了,谢谢楼主分享

bai2000 发表于 2017-11-23 10:08:04

对“2个钉”‘5个钉’之类的统计怎么做?

meja 发表于 2018-1-23 16:42:57

非常非常好!!!很实用!!!

ml2513 发表于 2018-2-15 01:08:54

你好,使用后出现下面的情况?》no function definition: XXEXP

springwillow 发表于 2018-2-22 13:27:36

ml2513 发表于 2018-2-15 01:08
你好,使用后出现下面的情况?》no function definition: XXEXP

见贴子后给出的函数

ml2513 发表于 2018-2-22 20:04:16

springwillow 发表于 2018-2-22 13:27
见贴子后给出的函数

我是新手,还不明白,不过谢谢您了。

邓超0203 发表于 2018-2-26 12:50:54

CAD2006 用不了

springwillow 发表于 2018-2-27 08:17:12

邓超0203 发表于 2018-2-26 12:50
CAD2006 用不了

把正则函数粘到程序开头
页: [1] 2 3 4 5
查看完整版本: 对文本数字分类求和