麻吉888888888 发表于 2015-12-3 03:40:45

求教关于在字母、数字混合文本中提取数字的问题

本帖最后由 麻吉888888888 于 2015-12-4 01:35 编辑

已知套内面积,需要求建筑面积(建筑面积=套内面积/容积率)。
编了个小程序,发现只能对建筑面积的整数部分有效。经多次试验,应该是在提取数字上出了问题,百思不得其解。求教大侠,代码是哪儿错了,该怎么改?

处理前文字:120.33m^u2^u
输入容积率:0.3
处理后文字:401.10m^u2^u

文字为多行文本。


不好意思,新人不懂提问规矩(defun c:ttt(/ ss add en txt enl num0)
(while(not (setq add (getreal "\n容积率:"))))
(princ "\n选择文字:")
(while (setq ss (ssget '((0 . "TEXT,mtext")(1 . "*m^u2^u*"))));;只有含有m^u2^u的才能被选



(repeat (setq n (sslength ss))
    (setq en (ssname ss (setq n (1- n))))
    (setq txt (cdr (assoc 1 (setq enl (entget en)))));;可能问题就出在这里
    (setq num0 (atoi txt)num2 (atoi txt2)
          txt (substr txt (1- (strlen (rtos num0))));;1-仅针对于m^u2^u之前为两位小数的情况
          num2 (/ num2 add)
          txt (strcat (rtos num2 2 2) txt);;第一个2表示计算结果以小数表示,第二个2表示保留2


          enl (subst (cons 1 txt) (assoc 1 enl) enl)
          )
    (entmod enl)
)
    )
)

mmmmmm 发表于 2015-12-3 09:22:45

...
(setq num0 (atoi txt)num2 (atoi txt2)
...
txt2没见有定义啊

llsheng_73 发表于 2015-12-3 12:28:39

整个过程未见对字符串进行数字提取,也没看见示例字符串,最好弄个示例字符串,以及希望提取哪些内容

麻吉888888888 发表于 2015-12-4 01:35:06

处理前文字:120.33m^u2^u
输入容积率:0.3
处理后文字:401.10m^u2^u

文字为多行文本。


不好意思,新人不懂提问规矩

ZZXXQQ 发表于 2015-12-4 08:27:29

(defun c:ttt(/ ss add en txt enl)
(while(not (setq add (getreal "\n容积率: "))))
(princ "\n选择文字: ")
(while (setq ss (ssget '((0 . "*TEXT")(1 . "*m^u2^u*"))));;只有含有m^u2^u的才能被选中
   (repeat (setq n (sslength ss))
    (setq en (ssname ss (setq n (1- n))))
    (setq txt (cdr (assoc 1 (setq enl (entget en)))))
    (setq txt (strcat (rtos (/ (atof txt) add) 2 2) "m^u2^u"))
    (entmod (subst (cons 1 txt) (assoc 1 enl) enl))
   )
)
(princ)
)
页: [1]
查看完整版本: 求教关于在字母、数字混合文本中提取数字的问题