dragoon33333 发表于 2016-10-2 11:46:25

437271963 发表于 2016-10-2 11:16
写了一个,在命令行显示数据统计:

多谢,代码功能很强大。我这需求不用这么复杂。

437271963 发表于 2016-10-2 11:57:47

本帖最后由 437271963 于 2016-10-2 12:01 编辑

dragoon33333 发表于 2016-10-2 11:46
多谢,代码功能很强大。我这需求不用这么复杂。
这个是样例,里面根据坐标排序功能可以参考。每两个水平文字一组进行分类。

yshf 发表于 2016-10-2 14:47:24

试用以下程序:
(defun c:flqh()
(command "_undo" "be")

(defun tqsjzb(Xssa Xn / i n Xtymb)
       (setq i 0   n (sslength Xssa)Xtymb ni)
       (repeat n
          (setq ent (ssname Xssa i)
                  dxf (entget ent)
          )
          (if (= Xn 0)
                (setq Xtymb (cons (list (cdr (assoc 1 dxf)) (cdr (assoc 10 dxf))) Xtymb))
                (setq Xtymb (cons (list (cdr (assoc 1 dxf)) (cdr (assoc 10 dxf)) ent) Xtymb))
          )
          (setq i (1+ i))
       )
      
       (setq Xtymb (vl-sort Xtymb '(lambda(e1 e2)
                                        (setq pt1 (cadr e1)
                                                pt2 (cadr e2)
                                        )
                                        (if (equal (cadr pt1) (cadr pt2) 2.0)
                                              (< (car pt1) (car pt2))
                                              (> (cadr pt1) (cadr pt2))
                                        )
                                    )
                      )
       )
)

(if (progn
          (princ "\n请选取要统计的数据:")
          (setq ssa (ssget '((0 . "*text") (1 . "#*#"))))
      )
      (if (progn
             (princ "\n请选取更新的数据:")
             (setq ssb (ssget '((0 . "*text") (1 . "#*#壁厚管材,#*#"))))

         )
          (progn
              (setq tymba (tqsjzb ssa 0))
              (setq tymbb (tqsjzb ssb 1))
                  
              (setq sjb nil)
              (while tymba
                   (setq sjb (cons (list (car (car tymba)) (car (cadr tymba))) sjb))
                   (setq tymba (cdr (cdr tymba)))
              )
              (setq qhjg 'nil)
            (foreach zb sjb
                   (if (setq cxjg (assoc (car zb) qhjg))
                       (setq qhjg (subst (list (car zb) (+(cadr cxjg) (read (cadr zb)))) cxjg qhjg))
                       (setq qhjg (cons (list (car zb) (read (cadr zb))) qhjg))
                   )
            )
            (setq qhjg (vl-sort qhjg '(lambda(x1 x2)(< (car x1) (car x2)))))
              (setq Newsjb nil)
              (while tymbb
                   (setq Newsjb (cons (list (car (car tymbb)) (last (cadr tymbb))) Newsjb))
                   (setq tymbb (cdr (cdr tymbb)))
              )
              (foreach zb qhjg
                   (If (setq cxjg (assoc (strcat (car zb) "壁厚管材" ) Newsjb))
                     (progn
                            (setq ent (last cxjg)
                                  dxf (entget ent)
                                  dxf (subst (cons 1 (rtos (cadr zb))) (assoc 1 dxf) dxf)
                          )
                          (entmod dxf)
                     )
                   )
            )
         )
      )
)

(command "_undo" "e")
(princ)
)

dragoon33333 发表于 2016-10-2 15:30:26

yshf 发表于 2016-10-2 14:47
试用以下程序:

多谢大神,代码思路非常好。我嵌套了四五层最终也弄出来了。
页: 1 [2]
查看完整版本: 已解决:AB两列数据,A列是类型,B列是数量,如何归类并对每类求和。