下面是简化后的程序 - ;文本数字按十位数取整的函数
- ;日期:2013.08.06
- ;作者:CADMAN
- ;子函数对纯数字文字取整
- (defun c:qzs ( / text_old text_new text_el i x nr ss)
- (princ "\n请框选要取整的数字:")
- (setq ss (ssget '((0 . "TEXT"))))
- (setq i 0 text_list nil)
- (repeat (setq x (sslength ss))
- (setq text_el (entget (ssname ss i)))
- (setq txt_old (cdr(assoc 1 text_el))) ;提取文本内容并赋值给变量TEXT_OLD
- (if (shuzi text_old) (progn ;如果是数字改内容,否则什么也不做
- (setq text_new (itoa (* (fix (/ (+ (atof text_old) 9) 10)) 10))) ;对文本内容取整
- (if (assoc 62 text_el);改过的文本变红
- (setq text_el (subst '(62 . 1) (assoc 62 text_el) text_el))
- (setq text_el (append '((62 . 1))))
- )
- (entmod (subst (cons 1 text_new) (assoc 1 text_el) text_el)) ;取整后的图元组码修改及图元的生成
- ))
- (setq i (1+ i))
- );结束repeat
- (princ "总共选择了N=")(princ x) ;统计输出修改了多少个数字
- (princ)
- )
- ;子函数,判断一个字符串是否全部为数字
- (defun shuzi (text_old / num_list i el)
- (setq num_list nil i 0)
- (setq num_list (vl-string->list text_old))
- (setq n (length num_list))
- (foreach el num_list
- (if (and (<= el 57) (>= el 48))
- (setq i (1+ i))
- )
- )
- (= i n) ;这样可直接返回T或nil
- )
|