明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5071|回复: 30

[已解答] 提取文本数字并计算写入的程序

[复制链接]
发表于 2015-2-5 07:46 | 显示全部楼层 |阅读模式
3明经币
本人近期在工作中遇到大量   "钢板 δ10-200x100"  类似的运算,
要运算后写入已存在的单行文本单件重量   "xx"  中,
本人水平有限,请好心人帮忙写个程序,谢谢!
计算公式:  xx=10x200x100x0.001x0.001x7.85

最佳答案

发表于 2015-2-5 07:46 | 显示全部楼层
  1. (defun c:tt (/ a b n3 s1 ss)
  2.   (princ "\n选择文字: ")

  3.   (if (and
  4.   (setq ss (ssget ":S" '((0 . "*TEXT"))))
  5.   (setq n3 (entget (setq s1 (car (entsel "\n写入数值: ")))))
  6.       )
  7.     (progn
  8.       (setq a (cdr (assoc 1 (entget (ssname ss 0))))
  9.       b (apply '* (mapcar 'read (split-numbers a)))
  10.       b (* b 0.001 0.001 7.85)
  11.       )

  12.       (entmod (subst (cons 1 (rtos b 2 2)) (assoc 1 n3) n3))
  13.       (entupd s1)
  14.     )
  15.   )
  16.   (princ)
  17. )

  18. (defun split-numbers (str / buff l2)
  19.   (setq str (vl-string->list str))
  20.   (while str
  21.     (if  (< 47 (car str) 58)
  22.       (setq buff (cons (car str) buff))
  23.       (if buff
  24.   (setq l2   (cons (vl-list->string (reverse buff)) l2)
  25.         buff nil
  26.   )
  27.       )
  28.     )
  29.     (setq str (cdr str))
  30.   )
  31.   (if buff
  32.     (setq l2 (cons (vl-list->string (reverse buff)) l2))
  33.   )
  34.   (reverse l2)
  35. )

评分

参与人数 1明经币 +1 收起 理由
sutai + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2015-2-5 08:32 | 显示全部楼层
  1. ;; (abc "钢板 δ10-200x100")
  2. (defun abc (tx / lst)
  3.   (setq lst (xyp-HzEngNum+- tx 3))
  4.   ;(strcat "xx=" (xyp-strcat lst "x") "x0.001x0.001x7.85")
  5.   (apply '* (append (mapcar 'atoi lst) '(0.001 0.001 7.85)))
  6. )
回复

使用道具 举报

发表于 2015-2-5 08:59 | 显示全部楼层
回复

使用道具 举报

发表于 2015-2-5 09:12 | 显示全部楼层
(setq txt1 "钢板 δ120-2300x1400")
(setq n (vl-string-search "δ" txt1))
(setq txt2 (substr txt1 (+ n 3)))
(setq k (vl-string-search "-" txt2) i (vl-string-search "x" txt2) )
(setq txt3 (substr txt2 1 k) )
(setq txt4 (substr txt2 (+ 2 k) (- i k 1) ) )
(setq txt5 (substr txt2 (+ i 2) ))
(setq txt6 (rtos (* (atof txt3) (atof txt4) (atof txt5) 0.001 0.001 7.85) 2 4 ))

"3033.24"
回复

使用道具 举报

 楼主| 发表于 2015-2-5 10:29 | 显示全部楼层
本帖最后由 yangist 于 2015-2-5 10:36 编辑
fl202 发表于 2015-2-5 09:12
(setq txt1 "钢板 δ120-2300x1400")
(setq n (vl-string-search "δ" txt1))
(setq txt2 (substr txt1 ( ...

这个太有局限性了 我想要个能通用的:
比如:
钢板δ10x100x200
钢板δ10-100x200
钢板10-100x200
δ10-100x200
t10-100x200
钢板t10-100x200
钢板t10x100x200

钢板t10*100*200

因为每个人的习惯都不一样...
回复

使用道具 举报

 楼主| 发表于 2015-2-5 10:35 | 显示全部楼层
本帖最后由 yangist 于 2015-2-5 16:12 编辑
自贡黄明儒 发表于 2015-2-5 08:59
http://bbs.xdcad.net/thread-669968-1-1.html
〈钢板重量计算器>

谢谢,看到了,根据帖子的内容 我编了个程序
可惜用不了,提示参数类型错误
能帮我改改吗,谢谢
;;;提取数值计算========================
(DEFUN C:tt ( / ss ent dxf1 txt txt1 txt2 txt3 s s1 n3)
  ;(princ "\n选择标注: ")
  ;(setq ss (ssget ":S" '((0 . "Text")))
   ;     ent (entget (ssname ss 0))
   ;     a (cdr (assoc 1 ent))
  ; )
  (setq a "钢板 δ12-230x140")
  (setq b  (SplitInstead a))
  (setq b1 (atof (car b) 2 1))
  (setq b2 (atof (cadr b) 2 1))
  (setq b3 (atof (caddr b) 2 1))
  (setq s (rtos (* b1 b2 b3 0.001 0.001 7.85) 2 1))

  (setq n3 (entget (setq s1 (car (entsel "\n写入数值: ")))))
  (entmod (subst (cons 1 s) (assoc 1 n3) n3))
  (entupd s1)
  (princ)
)

;;;字符串中非数字用空格替代
(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 " "))
      )
    )
  )
;;;===================================
回复

使用道具 举报

 楼主| 发表于 2015-2-5 14:35 | 显示全部楼层
xyp1964 发表于 2015-2-5 08:32

院长大人 能帮楼上我自己写的程序调试下吗
您写的这个我用不来啊 o(╯□╰)o
回复

使用道具 举报

 楼主| 发表于 2015-2-5 16:53 | 显示全部楼层
本帖最后由 yangist 于 2015-2-5 17:07 编辑
vectra 发表于 2015-2-5 16:26

谢谢,非常好用,最佳答案
就是 钢板t10-200x100 计算结果是正确的
而 钢板δ10-200x100 计算结果就错了 可能和δ有关
另外碰到小数点 "." 时也会计算错误,这样可是会很危险哦
不知道能不能调整下,谢谢!
回复

使用道具 举报

发表于 2015-2-5 19:42 | 显示全部楼层
“钢板t10-200x100” 和 “钢板δ10-200x100”测试结果均为1.57

第24行
  1. (if        (< 47 (car str) 58)


修改为
  1. (if        (or (= 46 (car str)) (< 47 (car str) 58))


以增加对点号处理
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 17:29 , Processed in 0.227678 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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