提取字符串中的数字,若有则返回实数
本帖最后由 gaics 于 2021-8-15 14:14 编辑(defun ExtractNumbers (str / lst num i)
(setq lst (vl-string->list str))
(setq i 0)
(setq num "")
(repeat (length lst)
(if(or (= (nth i lst) 46)
(and (> (nth i lst) 47)
(< (nth i lst) 58)
)
)
(setq num (strcat num (chr(nth i lst))))
)
(setq i (1+ i))
)
(if (= (strlen num) 0)
(princ "未找到数字!")
(atof num)
)
)
适合从字符串中提取出一组数字(含小数点),如“<正交 开> 80.0 <正交 关>”返回值是80.0。
如果是存在多组数值的情况,提取的结果可能无意义。
本帖最后由 kkq0305 于 2021-8-16 16:05 编辑
写一个提取字符串文字的
(defun extstr (str / nstr)
(if (/= "" str)
(if (wcmatch str "#*")
(cons (rtos (atof str) 2)
(extstr (substr str (1+ (strlen (rtos (atof str) 2)))))
)
(progn
(setq nstr "")
(while (wcmatch str "[~1-9]*")
(setq nstr (strcat nstr (substr str 1 1))
str(substr str 2)
)
)
(cons nstr (extstr str))
)
)
)
)
如果要数字 则(mapcar 'atof (vl-remove-if-not '(lambda (x) (wcmatch x "#*")) (extstr str)))(setq str "Abcd80.0Edf95.63gHff")
(mapcar 'atof (vl-remove-if-not '(lambda (x) (wcmatch x "#*")) (extstr str)))
(80.0 95.63)
(ExtractNumbers "Abcd80.0Edfg90.0Hff")
如果要得到所有数字 就把(atof num)改成num。 (ExtractNumbers "Abcd80.0EdfgHff")
80.0
(ExtractNumbers "Abcd80.0Edfg90.0Hff")
80.09
(extstr "Abcd80.0EdfgHff")
("dcbA" "80" "ffHgfdE0.") jinan1913 发表于 2021-8-16 14:31
(ExtractNumbers "Abcd80.0EdfgHff")
80.0
(ExtractNumbers "Abcd80.0Edfg90.0Hff")
错误已在原楼修改{:1_1:} http://bbs.mjtd.com/thread-180398-1-1.html
这个里面有提取数字的函数 非常不错的程序,谢谢分享 kkq0305 发表于 2021-8-16 15:59
错误已在原楼修改
只有括号,会出错
(setq str "12.5(25.8)")
"12.5(25.8)"
(extstr str) ("12.5000" "." "8.0000")
感谢大佬分享
页:
[1]