自贡黄明儒 发表于 2013-8-4 08:55:30

《钢板重量计算器》

我的几十位同事,桌子上都摆上计算器,主要用来计算明细表中钢板重量的,我这个比他们的快
想用正则表达式没有成功
想将下面的SplitInstead SplitHiflybir合而为一,也没成功


;;======================================自贡黄明儒 2013年8月*《钢板重量计算器》
(defun hh-mm (a / B)
;;1 字符串中非数字用空格替代
(defun SplitInstead (a / B C D)
    (setq d "")
    (while (/= a "")
      (setq c (substr a 1 1))
      (setq b (ascii c))
      (setq a (substr a 2 (strlen a)))
      (if (or (and (> b 47) (< b 58)) (= b 46))
        (setq d (strcat d c))
        (setq d (strcat d " "))
      )
    )
    d
)
;;2 分割字符串 by highflybir
(defun SplitHiflybir (String Delimiter / LST STR)
    (setq str (VL-STRING-TRANSLATE Delimiter " " String)) ;首先替换
    (setq str (strcat "(" str ")"))                  ;然后加括号
    (mapcar 'atof (mapcar 'VL-PRINC-TO-STRING (read str))) ;转化
)
;;3 钢管重量计算(外径*臂厚-长度)
(defun hh-js2        (b / A C)
    (setq a (/ (car b) 2.0))                          ;外半径
    (setq c (- a (cadr b)))                          ;内半径
    (/ (* pi (- (* a a) (* c c)) (caddr b) 7.85)
       1000000
    )
)
;;4 圆钢重量计算(外径-长度)
(defun hh-js3        (b / A)
    (setq a (/ (car b) 2.0))                          ;半径
    (/ (* pi (* a a) (caddr b) 7.85)
       1000000
    )
)
;;5 筋板(厚)
(defun hh-js4        (b / AREA1)
    (vl-cmdf "area"
             "o"
             (car (entsel "\n>>>>(面域)or(pline组成的封闭线)"))
    )
    (setq area1 (getvar "area"))
    (/ (* area1 (car b) 7.85) 1000000)
)
;;6 钢板(长*宽*高)
(defun hh-js5        (b)
    (/ (* (car b) (cadr b) (caddr b) 7.85)
       1000000
    )
)
;;7 计算
(setq b (SplitHiflybir (SplitInstead a) ""))
(cond        ((and (wcmatch a "*钢管*") (= (length b) 3)) (hh-js2 b))
        ((and (wcmatch a "*圆钢*") (= (length b) 2)) (hh-js3 b))
        ((and (wcmatch a "*筋板*,*钢板*") (= (length b) 1))
       (hh-js4 b)
        )
        ((and (wcmatch a "*筋板*,*钢板*") (= (length b) 3))
       (hh-js5 b)
        )
)
)
(defun C:mm (/ CMD1 DCLID EN ENTL FN FNAME LIN RETURN# ZL)
(defun *error* (S)
    (setvar "cmdecho" cmd1)
    (princ S)
    (princ)
)
(setvar "modemacro" "自贡运机集团")
(setq cmd1 (getvar "cmdecho"))
(setvar "cmdecho" 0)
(while (not (and (setq en (car (entsel "\n 点取文本,计算重量")))
                   (setq entl (entget en))
                   (wcmatch (cdr (assoc 0 entl)) "*TEXT")
                   (setq zl (cdr (assoc 1 entl)))
                   (wcmatch zl "*钢板*,*钢管*,*筋板*,*圆钢*")
              )
       )
)
(setq zl (rtos (hh-mm zl) 2 3))
(setq fname (vl-filename-mktemp nil nil ".dcl"))
(setq fn (open fname "w"))
(write-line "cjjskdcl : dialog{" fn)
(write-line "label=\"自贡运机集团 黄明儒\";" fn)
(write-line
    ":edit_box{label=\"重量(Kg)\";key=\"cjjsedi\";value=\"1000\";mnemonic=\"K\";allow_accept=true;}"
    fn
)
(write-line "ok_only;" fn)
(write-line "}" fn)
(close fn)
(setq fn (open fname "r"))
(setq dclid (load_dialog fname))
(while
    (or        (eq (substr (setq lin (vl-string-right-trim
                                "\" fn)"
                                (vl-string-left-trim "(write-line \"" (read-line fn))
                              )
                  )
                  1
                  2
          )
          "//"
        )
        (eq (substr lin 1 (vl-string-search " " lin)) "")
        (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9)
               " : dialog"
             )
        )
    )
)

;;以下根据情况处理
(new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
(set_tile "cjjsedi" zl)
(mode_tile "cjjsedi" 2)
(action_tile "accept" "(done_dialog 1)")
(setq return# (start_dialog))
(unload_dialog dclid)
(close fn)
(vl-file-delete fname)
(setvar "cmdecho" cmd1)
(princ)
)
;;======================================自贡黄明儒 2013年8月*《钢板重量计算器》

**** Hidden Message *****

楠水 发表于 3 天前

进来学习一下

CTC 发表于 2013-8-4 09:26:45

lgttblue 发表于 2013-8-4 09:34:22

东西不错,挺实用的

tianyi1230 发表于 2013-8-4 09:45:53

好东西啊,

lpl 发表于 2013-8-4 10:26:16

不错,

wyl605 发表于 2013-8-4 10:29:41

这个东西试试看学习一下

hao3ren 发表于 2013-8-4 11:25:34

材料表计算太麻烦了

flytoday 发表于 2013-8-4 11:53:11

应增加方钢管为好…………

kwok 发表于 2013-8-4 23:17:38

本帖最后由 kwok 于 2013-8-4 23:18 编辑

弄个算体积,如可乐瓶体积.

云中孤鹰 发表于 2013-8-5 08:22:08

确实不错,辛苦了
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 《钢板重量计算器》