664571221 发表于 2019-1-13 10:31:57

各位老大帮忙改下这个程序,数字除以1000保留三位小数后面是0的话忽略

(defun c:SZCQ (/ dxf lst lst2 name num ss)
        (setq ss (ssget '((0 . "MTEXT,TEXT"))))
        (if (/= ss nil)
                (repeat (setq num (sslength ss))
                        (setq name (ssname ss (setq num (1- num))))
                        (setq lst (StrType (cdr (assoc 1 (setq dxf (entget name))))))
                        (setq lst2 "")
                        (foreach element lst
                                (if (/= (atof element) 0.0)
                                        (setq lst2 (strcat lst2 (rtos (/ (atof element) 1000.0))))
                                        (setq lst2 (strcat lst2 element))
                                )
                        )
                        (entmod (subst (cons 1 lst2) (assoc 1 dxf) dxf))
                )
        )
        (princ)
)


;;说明:字符串以数字分隔
;;参数:str:字符串
;;返回:分隔后的字符串
(defun str-cut (str / allst fst lst-number lst-str str->list)
(setq str->list (vl-string->list str))
(while str->list
    (setq fst (car str->list))
    (if (<= 46 fst 57)
      (progn
      (setq lst-number (cons fst lst-number))
      (if lst-str
          (setq Allst (cons (reverse lst-str) Allst))
      )
      (setq lst-str nil)
      )
      (progn
      (setq lst-str (cons fst lst-str))
      (if lst-number
          (setq Allst (cons (reverse lst-number) Allst))
      )
      (setq lst-number nil)
      )
    )
    (setq str->list (cdr str->list))
)
(if (not str->list)
    (if lst-str
      (setq Allst (cons (reverse lst-str) Allst))
      (setq Allst (cons (reverse lst-number) Allst))
    )
)
(mapcar'vl-list->string (reverse Allst))
)
;(str-cut "AA1.2bc2.5Cd,+-.25")
;("AA" "1.2" "bc" "2.5" "Cd,+-" ".25")

xyp1964 发表于 2019-1-13 19:26:44

(setvar "DIMZIN" 8)
页: [1]
查看完整版本: 各位老大帮忙改下这个程序,数字除以1000保留三位小数后面是0的话忽略