找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4369|回复: 41

[他山之石] 《钢板重量计算器》

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2013-8-4 08:52:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  1. ;;======================================自贡黄明儒 2013年8月*《钢板重量计算器》
  2. (defun hh-mm (a / B)
  3.   ;;1 字符串中非数字用空格替代
  4.   (defun SplitInstead (a / B C D)
  5.     (setq d "")
  6.     (while (/= a "")
  7.       (setq c (substr a 1 1))
  8.       (setq b (ascii c))
  9.       (setq a (substr a 2 (strlen a)))
  10.       (if (or (and (> b 47) (< b 58)) (= b 46))
  11.         (setq d (strcat d c))
  12.         (setq d (strcat d " "))
  13.       )
  14.     )
  15.     d
  16.   )
  17.   ;;2 分割字符串 by highflybir
  18.   (defun SplitHiflybir (String Delimiter / LST STR)
  19.     (setq str (VL-STRING-TRANSLATE Delimiter " " String)) ;首先替换
  20.     (setq str (strcat "(" str ")"))                  ;然后加括号
  21.     (mapcar 'atof (mapcar 'VL-PRINC-TO-STRING (read str))) ;转化
  22.   )
  23.   ;;3 钢管重量计算(外径*臂厚-长度)
  24.   (defun hh-js2        (b / A C)
  25.     (setq a (/ (car b) 2.0))                          ;外半径
  26.     (setq c (- a (cadr b)))                          ;内半径
  27.     (/ (* pi (- (* a a) (* c c)) (caddr b) 7.85)
  28.        1000000
  29.     )
  30.   )
  31.   ;;4 圆钢重量计算(外径-长度)
  32.   (defun hh-js3        (b / A)
  33.     (setq a (/ (car b) 2.0))                          ;半径
  34.     (/ (* pi (* a a) (caddr b) 7.85)
  35.        1000000
  36.     )
  37.   )
  38.   ;;5 筋板(厚)
  39.   (defun hh-js4        (b / AREA1)
  40.     (vl-cmdf "area"
  41.              "o"
  42.              (car (entsel "\n>>>>(面域)or(pline组成的封闭线)"))
  43.     )
  44.     (setq area1 (getvar "area"))
  45.     (/ (* area1 (car b) 7.85) 1000000)
  46.   )
  47.   ;;6 钢板(长*宽*高)
  48.   (defun hh-js5        (b)
  49.     (/ (* (car b) (cadr b) (caddr b) 7.85)
  50.        1000000
  51.     )
  52.   )
  53.   ;;7 计算
  54.   (setq b (SplitHiflybir (SplitInstead a) ""))
  55.   (cond        ((and (wcmatch a "*钢管*") (= (length b) 3)) (hh-js2 b))
  56.         ((and (wcmatch a "*圆钢*") (= (length b) 2)) (hh-js3 b))
  57.         ((and (wcmatch a "*筋板*,*钢板*") (= (length b) 1))
  58.          (hh-js4 b)
  59.         )
  60.         ((and (wcmatch a "*筋板*,*钢板*") (= (length b) 3))
  61.          (hh-js5 b)
  62.         )
  63.   )
  64. )
  65. (defun C:mm (/ CMD1 DCLID EN ENTL FN FNAME LIN RETURN# ZL)
  66.   (defun *error* (S)
  67.     (setvar "cmdecho" cmd1)
  68.     (princ S)
  69.     (princ)
  70.   )
  71.   (setvar "modemacro" "自贡运机集团")
  72.   (setq cmd1 (getvar "cmdecho"))
  73.   (setvar "cmdecho" 0)
  74.   (while (not (and (setq en (car (entsel "\n 点取文本,计算重量")))
  75.                    (setq entl (entget en))
  76.                    (wcmatch (cdr (assoc 0 entl)) "*TEXT")
  77.                    (setq zl (cdr (assoc 1 entl)))
  78.                    (wcmatch zl "*钢板*,*钢管*,*筋板*,*圆钢*")
  79.               )
  80.          )
  81.   )
  82.   (setq zl (rtos (hh-mm zl) 2 3))
  83.   (setq fname (vl-filename-mktemp nil nil ".dcl"))
  84.   (setq fn (open fname "w"))
  85.   (write-line "cjjskdcl : dialog{" fn)
  86.   (write-line "label=\"自贡运机集团 黄明儒\";" fn)
  87.   (write-line
  88.     ":edit_box{label=\"重量(Kg)\";key=\"cjjsedi\";value=\"1000\";mnemonic=\"K\";allow_accept=true;}"
  89.     fn
  90.   )
  91.   (write-line "ok_only;" fn)
  92.   (write-line "}" fn)
  93.   (close fn)
  94.   (setq fn (open fname "r"))
  95.   (setq dclid (load_dialog fname))
  96.   (while
  97.     (or        (eq (substr (setq lin (vl-string-right-trim
  98.                                 "\" fn)"
  99.                                 (vl-string-left-trim "(write-line \"" (read-line fn))
  100.                               )
  101.                     )
  102.                     1
  103.                     2
  104.             )
  105.             "//"
  106.         )
  107.         (eq (substr lin 1 (vl-string-search " " lin)) "")
  108.         (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9)
  109.                  " : dialog"
  110.              )
  111.         )
  112.     )
  113.   )

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

游客,如果您要查看本帖隐藏内容请回复
1.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

发表于 2013-8-4 10:21:20 | 显示全部楼层
回复,看隐藏春色。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 0 反对 1

使用道具 举报

发表于 2013-8-4 09:05:47 | 显示全部楼层
很强大哦,进来围观一个!!!:):)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 13:01:59 | 显示全部楼层
楼主,你应该用ODCL写对话框。

点评

ODCL我还没有学习呢,主要是加载另外的东西,不喜欢。  发表于 2013-8-4 14:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 13:03:26 | 显示全部楼层
楼主,你想用正则提出什么没成功?

点评

就是我只想要数字,如"钢板δ6.333*666-555",我想用其中的数字(6.333 666 555) 进行计算,看了这么多正则表达式,就没有看到这个的查找规则。  详情 回复 发表于 2013-8-4 14:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-8-4 14:06:58 | 显示全部楼层
newer 发表于 2013-8-4 13:03
楼主,你想用正则提出什么没成功?

就是我只想要数字,如"钢板δ6.333*666-555",我想用其中的数字(6.333 666 555) 进行计算,看了这么多正则表达式,就没有看到这个的查找规则。

点评

帮你测试了下,可以啊 命令: (xd::string:regexps "(\\d+)?[.]?(\\d+)" "5.3*200-600" "") ("5.3" "200" "600")  详情 回复 发表于 2013-8-4 14:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 14:22:45 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-8-4 14:06
就是我只想要数字,如"钢板δ6.333*666-555",我想用其中的数字(6.333 666 555) 进行计算,看了这么多正则 ...

帮你测试了下,可以啊

命令: (xd::string:regexps "(\\d+)?[.]?(\\d+)" "5.3*200-600" "")
("5.3" "200" "600")

点评

(setq string "钢板2.3*5.2*60") ;;用正则表达式,提取数字 (defun SplitInstead (S / LST REGEX) (setq regex (vlax-create-object "VBScript.RegExp")) (vlax-put-property regex 'global actrue) (vla  详情 回复 发表于 2013-8-4 14:36
明白了,这样写是正确的,谢谢!!!  发表于 2013-8-4 14:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

 楼主| 发表于 2013-8-4 14:36:53 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2013-8-4 14:38 编辑
newer 发表于 2013-8-4 14:22
帮你测试了下,可以啊

命令: (xd::string:regexps "(\\d+)?[.]?(\\d+)" "5.3*200-600" "")


(setq string "钢板2.3*5.2*60")
;;用正则表达式,提取数字
(defun SplitInstead (S / LST REGEX)
  (setq regex (vlax-create-object "VBScript.RegExp"))
  (vlax-put-property regex 'global actrue)
  (vlax-put-property
    regex
    'pattern
   "([url=file://\\d+)?[.]?(\\d]\\d+)?[.]?(\\d[/url]+)"  )
  (vlax-for x (vlax-invoke regex 'execute s)
    (setq lst (cons (atof (vlax-get x 'value)) lst))
  )
  (vlax-release-object regex)
  (reverse lst)
)
(SplitInstead string)

点评

确实,正则表达式可以减少很多代码的,关键是可靠啊。  详情 回复 发表于 2013-8-4 14:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-4 14:50:07 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2013-8-4 14:36
(setq string "钢板2.3*5.2*60")
;;用正则表达式,提取数字
(defun SplitInstead (S / LST REGEX)

确实,正则表达式可以减少很多代码的,关键是可靠啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-4 19:54:57 来自手机 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 584个

财富等级: 财运亨通

发表于 2013-8-5 07:02:21 | 显示全部楼层
很实用的东西。看看{:soso_e102:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-5 07:17:14 | 显示全部楼层
很實用的東西。看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 862个

财富等级: 财运亨通

发表于 2013-8-5 09:27:07 | 显示全部楼层

很实用的东西。看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-8-6 06:48:17 | 显示全部楼层
命令: (SplitInstead string)
; 错误: 发生意外。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-2-9 08:01:26 | 显示全部楼层
根据单重数量算总重并写入明细表有没有办法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 03:38 , Processed in 0.400645 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表