上面的没加(vl-load-all)
下面的是最修版本,基本上解决了所有多行文本出现的问题

- ;;;--------------------求所选文字中包含的数字和---------------------;;;
- ;;;---------------------应用范围:支持MTEXT/TEXT---------------------;;;
- ;;;--------------有效性:对每个字段里包含多个数字的字段有效----------;;;
- ;;;-----支持负数、非小数点的其他点存在,支持多行文本中不同字体------;;;
- ;;;----------------本程序可自由使用,转载请注明出处-----------------;;;
- ;;;--------------------------制作:SNSJ 2004.1.15--------------------;;;
- ;;;---------------------------nbs.lsp-------------------------------;;;
- (defun c:nbs(/ apple_txt nl apple_nl apple_kkj apple_getstr apple_hb1
- apple_hb0 apple_nl x y z apple_wz apple_wz1 zkh zkh1
- apple_newjd obj qq nb nb1)
- (vl-load-com)
- (princ "\n***&对选中文字求和程序&制作:SNSJ***")
- (setq apple_txt nil nl nil apple_nl nil apple_kkj nil apple_getstr nil)
- (if (ssget '((0 . "* TEXT")))
- (vlax-for obj (vla-get-activeselectionset
- (vla-get-activedocument (vlax-get-acad-object)))
- (setq apple_txt (cons(strcat(vla-get-textstring obj) "*")apple_txt))
- )
- )
- (setq apple_hb (vl-catch-all-apply 'strcat apple_txt))
- (while (vl-string-search "\\P" apple_hb)
- (setq apple_hb (vl-string-subst "*" "\\P" apple_hb))
- )
- (setq apple_hb0 apple_hb)
- (while
- (setq nb (vl-string-search "{" apple_ hb)
- nb1 (vl-string-search "}" apple_hb))
- (setq nl (cons (substr apple _hb (+ nb 1) (- nb1 (- nb 1))) nl))
- (setq apple_hb (substr apple_hb (+ nb1 2)))
- )
- (setq apple_hb1 (vl-catch-all-apply 'strcat nl))
- (mapcar
- '(lambda (x)
- (setq apple_hb0 (vl-string-subst " " x apple_hb0))
- ) nl
- )
- (while
- (setq apple_wz (vl-string-search ";" apple_hb1))
- (setq apple_hb1 (substr apple_hb1 (+ apple_wz 2)))
- (setq zkh (vl-string-search "}" apple_hb1))
- (setq zkh1 (vl-string-search "\" apple_hb1)
- )
- (cond
- ((null zkh1)(setq qq zkh))
- (t (setq qq (min zkh zkh1)))
- )
- (setq apple_nl (cons (substr apple_hb1 1 (+ qq 1)) apple_nl))
- (setq apple_hb1 (substr apple_hb1 (+ qq 2)))
- )
- (setq apple_nl (cons apple_hb0 apple_ nl))
- (setq apple_nl (vl-catch-all-apply 'strcat apple_nl))
- (mapcar '(lambda (y)
- (if (not(or(and(<= y 57) (>= y 48)) (= y 46) (= y 45)))
- (setq y 32))
- (setq apple_kkj (cons y apple_kkj)))
- (vl-string->list apple_nl)
- )
- (setq apple_ kkj (vl-string-trim " " (vl-list->string (reverse apple_kkj))))
- (while
- (setq apple_wz1 (vl-string-search " " apple_kkj))
- (setq apple_getstr (cons (substr apple_kkj 1 apple_wz1) apple_getstr))
- (setq apple_kkj (vl-string-trim " "(substr apple_kkj (+ apple_wz1 2))))
- )
- (setq apple_ getstr
- (mapcar
- '(lambda (z)
- (atof z)
- )
- (vl-remove "." (vl-remove "-"(cons apple_kkj apple_getstr))))
- )
- (setq apple_jsjg (vl-catch-all-apply '+ apple_getstr))
- (princ "\n&所选文字中数字的和为&:")
- (princ apple_jsjg)
- (cond ((null apple_oldjd) (setq apple_oldjd 2)))
- (initget 4)
- (setq apple_ newjd (getint(strcat "\n&输入计算精度&<" (rtos apple_oldjd) ">")))
- (if (not apple_newjd)
- (setq apple_ newjd apple_ oldjd)(setq apple_oldjd apple_newjd)
- )
- (vl-cmdf ".text" (getpoint "\n&计算结果插入点&:")(getdist "\n&输入字高&:") "" (rtos apple _jsjg 2 apple_newjd))
- (princ)
- )
|