求教关于在字母、数字混合文本中提取数字的问题
本帖最后由 麻吉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)
)
)
) ...
(setq num0 (atoi txt)num2 (atoi txt2)
...
txt2没见有定义啊 整个过程未见对字符串进行数字提取,也没看见示例字符串,最好弄个示例字符串,以及希望提取哪些内容 处理前文字:120.33m^u2^u
输入容积率:0.3
处理后文字:401.10m^u2^u
文字为多行文本。
不好意思,新人不懂提问规矩
(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]