gogozb 发表于 2023-1-12 10:49:06

求助:分类求和

本帖最后由 gogozb 于 2023-1-12 10:50 编辑

烦请老师们出手相助,我已经没有币可悬赏呢!
现在需要求和的数据样式有如图两种形式,需要得到有四种。



liuhe 发表于 2023-1-12 11:53:42

你这个需求,我有经验搞过,但是没有现成的代码。

我可以提供编程思路,也可以提供插件定制,有兴趣加我qq859779429。

Klein 发表于 2023-1-12 16:09:35

结果不是问题,主要工作量在数据提取上,如果你给的数据样式准确,实现起来应该不是特别难。
最笨的办法,单个读取字符,遇到要统计数量的关键字,就开始判断后续字符,如果是数字就持续读,直到非数字,然后把数字字符转化成数值,然后把关键字和数量做成点对存储起来方便处理。
我也是初学不久,什么正则表达式的不会,只能这个最笨的办法了

vitalgg 发表于 2023-1-12 18:13:56

本帖最后由 vitalgg 于 2023-1-12 18:54 编辑

(setq res
      (stat:classify
       (mapcar
'(lambda(x)
   (cons (car x)
   (atoi
      (cadr x))))
(list:split
   (string:auto-split
    (string:subst-all "" "+"
          (entity:getdxf (car(entsel)) 1)))
   2))))
(setq pt (getpoint "绘制结果"))
(entity:make-text
(string:from-list
(mapcar '(lambda(x)
       (strcat (car x)
         (itoa(cdr x))))
    res)
"+")
(setq pt (polar pt (* 1.5 pi) 5))
3 0 0.8 0 "LB")

(entity:make-text
(string:from-list
(mapcar '(lambda(x)
       (strcat (car x)
         (itoa(cdr x))))
    res)
"")
(setq pt (polar pt (* 1.5 pi) 5))
3 0 0.8 0 "LB")


(foreach txt (mapcar '(lambda(x)
      (strcat (car x)
      (itoa(cdr x))))
         res)
   (entity:make-text
    txt
    (setq pt (polar pt (* 1.5 pi) 5))
    3 0 0.8 0 "LB"))

(table:make
(setq pt (polar pt (* 1.5 pi) 5))
"统计表"
'("名称" "数量")
(append
(mapcar '(lambda(x)
       (list (car x)(cdr x)))
    res)
(list
   (list "合计"
   (apply '+ (mapcar 'cdr res))))
))

基于 @lisp 函数库,代码中所有含有 : 的均为 @lisp提供的函数。
https://gitee.com/atlisp/atlisp-lib





https://atlisp.cn/static/videos/stat-23.mp4

gogozb 发表于 2023-1-12 21:32:01

vitalgg 发表于 2023-1-12 18:13
基于 @lisp 函数库,代码中所有含有 : 的均为 @lisp提供的函数。
https://gitee.com/atlisp/atlisp-lib
...

谢谢大佬!后面有时间再研究,最近太忙了。
再次感谢。

gaolei_gaolei 发表于 2023-5-11 20:10:17

留个QQ一起研究
页: [1]
查看完整版本: 求助:分类求和