对文本数字分类求和
对文本后带数字的文本按前面文本的内容分类对后面的数字进行求和。如下图:本工具用到的正则表达式的函数搬来此处。
;;--------------------------------------------正则表达式----------------------------------------------------;;
(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: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)
)
兄弟,你那gfsum怎么加载,附件加载选择对象后没有反应,和帖子上兄弟说的一样,出现一串英文。将正则表达式粘贴到附件上则提示没有这命令。请教如何加载,本人不懂lisp。但非常喜欢这插件,功能非常有用。麻烦指点下,谢谢! ml2513 发表于 2018-2-27 09:22
谢谢,可以使用。
请教楼主,如果文本字母后面想加数字,然后合计。表达式应该怎么修改。
我也想问这个问题,会了麻烦联系一下我1156999411,有谢 谢谢分享!!! 统计的文本要是能生成表格就更好了,谢谢楼主分享 对“2个钉”‘5个钉’之类的统计怎么做? 非常非常好!!!很实用!!! 你好,使用后出现下面的情况?》no function definition: XXEXP
ml2513 发表于 2018-2-15 01:08
你好,使用后出现下面的情况?》no function definition: XXEXP
见贴子后给出的函数 springwillow 发表于 2018-2-22 13:27
见贴子后给出的函数
我是新手,还不明白,不过谢谢您了。 CAD2006 用不了 邓超0203 发表于 2018-2-26 12:50
CAD2006 用不了
把正则函数粘到程序开头