ninja37 发表于 2019-12-30 14:49

求各位大侠写一个 单行文本最后数字相加的程序。

各位大侠们,由于本人是机加工行业年纪大了记忆力反应都不好,算账价格老是算错,被老板客户骂晕。求各位写一个程序。
程序作用:几个单行文本最后的数字相加
程序操作:1 输入命令      2 选择几个单行文本    3 显示算账结果
       显示的算账结果既可以显示在CAD提示栏也可以插入单行文本到CAD指定位置
       A算账结果可以是一个总结果B也可以是23+45+32=100这样的文本结果,总之怎么容易怎么来。

总的意思就是以下文本最后的数字相加   得出一个整数或者小数的帐就可以:
合计: -- 人民币: 72.51 X4= 290.04
合计: -- 人民币: 69.36
单块板 30
侧割15
上面4行文本选择后得出一个总价格 404.40   404.4   404 有小数无小数都可以

谢谢各位了   能写出这个程序估计也是一个大的挑战。

xj6019 发表于 2019-12-30 14:49

我只是个搬运工,好用不好用不知道
(DEFUN C:jia1()
(setq jd (getint "input 精度<0>:"))
(if (= jd nil) (setq jd 0))
(princ "\nselect object:")
(setq s (ssget))
(setq n (sslength s))
(setq k 0 )(setq mm 0.0)
(while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq t1 (assoc '0 a))
      (setq t1 (cdr t1))
      (if (= t1 "TEXT") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (setq tx (atof tx))
          (setq mm (+ tx mm))
         ))
      (if (= t1 "DIMENSION") (PROGN
          (setq tx (assoc '1 a))
          (setq tx (cdr tx))
          (if (and (/= tx "")(/= tx "<>"))(setq tx (atof tx)))
          (if (or (= tx "")(= tx "<>"))(progn
            (setq tx (assoc '42 a))
            (setq tx (cdr tx))
            ))
          (if (= k 0) (setq MM TX) (setq mm (+ tx mm)))
         ))
      (setq k (+ k 1))
)
(setq mm (rtos mm 2 jd))
(setq po (getpoint "input point----:"))
(command "text" po """" mm)
)

xj6019 发表于 2019-12-30 15:58

本帖最后由 xj6019 于 2019-12-30 16:03 编辑

我还是只是个搬运工,搬砖下苦力的,嘿嘿......
先凑合用着,不行就让大神给个更好用的,我也学学
(defun c:total (/ cmdmode sset ssl nsset temp ssl1 total)
(if *error*
    quit
)
(setq cmdmode (getvar "cmdecho"))
(setvar "cmdecho" 0)
(prompt "\nSelect numbers to add: ")
(setq sset (ssget))
(if (null sset)
    (princ "\nError: Nothing selected!\n") ; 过滤出选中的“text”实体,并报告有多少“text”实体被选中。
    (progn
      (setq ssl (sslength sset))
      (setq nsset (ssadd))
      (while (> ssl 0)
      (setq temp (ssname sset (setq ssl (1- ssl))))
      (if (= (cdr (assoc 0 (entget temp))) "TEXT")
          (ssadd temp nsset)
      )
      )
      (setq ssl (sslength nsset))
      (print ssl)
      (princ "text entities are found.") ; 选出所有可转化为数的“TEXT”,并求和。
      (setq total 0)
      (setq ssl1 ssl)
      (while (> ssl 0)
      (setq temp (ssname nsset (setq ssl (1- ssl))))
      (setq number (atof (cdr (assoc 1 (entget temp)))))
      (if (= 0 number)
          (setq ssl1 (1- ssl1))
          (setq total (+ total number))
      )
      )                                       ; 显示和及加数的个数,便于用户检查是否多选或漏选。
      (princ "\nThe total is ")
      (princ total)
      (princ "of the ")
      (princ ssl1)
      (princ "numbers\n")
    )
)

(setvar "CMDECHO" cmdmode)
)

(princ "\n\tc:total loaded. Start command with total.")



ninja37 发表于 2019-12-30 20:22

各位朋友们这个问题已经完美解决论坛里面的 ( 叮咚 )先生已经帮我写好了    速度很快   我们交流了好久他还是很耐心的帮我解决问题。他是付费开发插件代码的    这是他的QQ 1020952830
楼上回复我的朋友贴的代码不能用。

shcvip 发表于 2021-12-7 13:49

xj6019 发表于 2019-12-30 15:58
我还是只是个搬运工,搬砖下苦力的,嘿嘿......
先凑合用着,不行就让大神给个更好用的,我也学学
(defun ...

已经借用,谢谢分享!

at1636 发表于 2022-5-5 23:15

学习了,谢谢分享
页: [1]
查看完整版本: 求各位大侠写一个 单行文本最后数字相加的程序。