本帖最后由 marting 于 2018-2-24 10:07 编辑
试试
 - (defun c:tt (/ _split _padZero ss i e attVal_collection Startnum
- Low_Num High_Num Preifxformat
- )
- (defun _padZero (num md)
- (while (< (strlen num) md) (setq num (strcat "0" num)))
- num
- )
- (defun _split (lst i / numbers)
- (while (< 46 (setq n (nth (setq i (1- i)) lst)) 58)
- (setq numbers (cons n numbers))
- )
- (if (and numbers (setq str (vl-list->string lst)))
- (list (substr str 1 (1+ i)) (vl-list->string numbers))
- )
- )
- (and (setq ss (ssget "_:L" '((0 . "INSERT") (66 . 1))))
- (repeat (setq i (sslength ss))
- (setq e (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
- (setq attval
- (car
- (mapcar
- (function
- (lambda (at / num)
- (list (_split (vl-string->list
- (setq str (vla-get-textstring at))
- )
- (strlen str)
- )
- at
- )
- )
- )
- (vlax-invoke e 'Getattributes)
- )
- )
- )
- (if (car attval)
- (setq attVal_collection (cons attval attVal_collection))
- )
- attVal_collection
- )
- (setq attVal_collection
- (vl-sort
- attVal_collection
- '(lambda (a b)
- (< (distof (cadar a)) (distof (cadar b)))
- )
- )
- )
- (setq Low_Num (cadar (car attVal_collection)))
- (setq High_Num (cadar (last attVal_collection)))
- (setq Preifxformat
- (if (< (strlen Low_Num) (strlen High_Num))
- 0
- (strlen High_Num)
- )
- )
- (setq startNum
- (cond
- ((getint (strcat "\n输入起始值<"
- (itoa (setq startNum (atoi Low_Num)))
- ">: "
- )
- )
- )
- (startNum)
- )
- )
- (Foreach itm attVal_collection
- (vla-put-textstring
- (Cadr itm)
- (strcat (Caar itm)
- (if (zerop Preifxformat)
- (itoa startNum)
- (_padZero (itoa startNum) Preifxformat)
- )
- )
- )
- (setq startNum (1+ startNum))
- )
- )
- )
|