osikou 发表于 2021-2-22 22:54:25

字符串中如何提取数字

已获取字符串形式为如100~1000,需要计算平均值((100+1000)/2=550)
如何把100和1000提取出来?
因为位数不固定(例如1~5或1000~1500等)所以无法用substr函数。
求助高手指点。谢谢。

yshf 发表于 2021-2-22 23:04:00

(setq str "1000~1500")
(setq lst (read (strcat "(" (vl-string-subst " " "~" str) ")")))
(setq pjz (* 0.5 (apply '+ lst)))

"1000~1500"
(1000 1500)
1250.0

osikou 发表于 2021-2-22 23:25:56

非常感谢,能否再帮我加个判断条件,即如果str中不包含~则表明只是数字本身,不用求平均值。
因为选择中有变化数也有非变换数(非变化数就是一个数字例如1000或1500等)。

yshf 发表于 2021-2-24 07:44:19

(if (vl-string-search "~" str)
    (progn
      (setq lst (read (strcat "(" (vl-string-subst " " "~" str) ")")))
      (setq pjz (* 0.5 (apply '+ lst)))
   )
)

20060510412 发表于 2021-2-24 08:10:54

和我一样的需求,看看这个帖子吧。
http://bbs.mjtd.com/thread-180398-1-1.html

wangyonggao8 发表于 2021-2-24 08:12:49

高手

osikou 发表于 2021-2-24 11:22:01

(if (and (distof txtn)
   (= (strlen txtn)
         (strlen (rtos (distof txtn) 2 0))
      )
)
使用了distof进行对比来判断。

xyp1964 发表于 2021-2-24 13:54:23

;; (abc"100~1000")
(defun abc (str / n n1 a b)
(if (setq n (vl-string-search "~" str))
    (*(apply '+ (mapcar 'distof(list (substr str 1 n) (substr str (+ n 2)))))0.5)
    str
)
)

szx025 发表于 2021-3-4 14:25:58

MT:200KN TA:2960KN,如何读取其中的数字,然后再两数相减除一个指定的数n(2960-200)/n
页: [1]
查看完整版本: 字符串中如何提取数字