马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
鉴于大家在工作中经常遇到文字中数字的操作。
虽然有些功能某些插件上都会有,但是当有需要之时,却又到处到解决办法。
所以,决定将文字中的数字操作源码集合在些。。。
对于自己有特别需求的。也可以自行修改,以便实现其功能。
大家可以积极回帖,最好是把自己与本主题相关,最好是源码。
先抛点砖头出来。。。

- ;;written By carrot1983 2009-01-15
- (defun C:TT1 (/ E1 E2 ELIST NEWVALUE PT1 PT2 REAL V1)
- (princ "\n递增减LSP程序用于编辑层高表")
- (setvar "dimzin" 0) ;_消零控制
- (setq E1 (car (entsel "\n单选层高表某一标高: ")))
- (setq REAL (getreal "\n输入增值: "))
- (setq PT1 (getpoint "\n输入基点: "))
- (while (setq PT2 (getpoint PT1 "\n指定点: "))
- (setq ELIST (entget E1))
- (setq V1 (cdr (assoc 1 ELIST)))
- (setq NEWVALUE (rtos (+ (read V1) REAL) 2 3)) ;_精确到小数点后面三位
- (entmake (subst (cons 1 NEWVALUE)
- (assoc 1 ELIST)
- ELIST
- )
- )
- (setq E2 (entlast))
- (print (cdr (assoc 1 (entget E2))))
- (command "._move" E2 "" "none" PT1 "none" PT2)
- (setq E1 E2)
- (setq PT1 PT2)
- )
- (princ)
- )

- ;;计算所有含数字的文字之和(不考虑负号)
- ;;written By carrot1983 2009-01-16
- (defun C:TT2 (/ E I NUM NUMLIST RESULT SS V1 X)
- ;;ZML184的递归函数
- (defun STRCAT+ (LST)
- (if (= (length LST) 1)
- (strcat (car LST))
- (strcat (car LST) "+" (STRCAT+ (cdr LST)))
- )
- )
- ;;(TEST '("1" "2" "3" "4"))
- ;;->"1+2+3+4"
- (if (setq SS (ssget '((0 . "*TEXT*"))))
- (progn
- (setq NUMLIST '())
- (repeat (setq I (sslength SS))
- (setq E (ssname SS (setq I (1- I))))
- (setq V1 (cdr (assoc 1 (entget E))))
- ;;[通用函数]从文字中提取数字
- (setq NUM
- (read
- (strcat
- "("
- (vl-list->string
- (mapcar
- '(lambda (X)
- (if (member X (vl-string->list ".0123456789"))
- X
- 32
- )
- )
- (vl-string->list V1)
- )
- )
- ")"
- )
- )
- )
- (if NUM
- (setq NUMLIST (append NUM NUMLIST))
- )
- )
- (if (setq RESULT (apply '+ NUMLIST)) ;_执行加法
- (progn
- (setq MSG (STRCAT+ (mapcar 'vl-princ-to-string NUMLIST)))
- (princ (strcat "\n>>>>>总和为: "
- MSG
- "= "
- (vl-princ-to-string RESULT)
- )
- )
- )
- (princ "\n>>>>>总和为: 0")
- )
- )
- )
- (princ)
- )
|