另外一个代码
(defun c:fixblk ( / a b i s x )
(if (setq s (ssget "_:L" '((0 . "INSERT") (66 . 1))))
(repeat (setq i (sslength s))
(mapcar
'(lambda ( a b )
(mapcar '(lambda ( a b ) (vla-put-textstring (last a) (caddr b))) a b)
)
(setq a
(vl-sort
(mapcar
'(lambda ( x )
(vl-remove nil
(mapcar
'(lambda ( p )
(vl-some
'(lambda ( a )
(if (wcmatch (cadr a) p) a)
)
x
)
)
'("REV#" "R#DESC" "R#BY" "R#CHK" "R#DATE")
)
)
)
(LM:groupbyfunction
(mapcar
'(lambda ( a )
(list
(vl-list->string
(vl-remove-if-not '(lambda ( x ) (< 47 x 58))
(vl-string->list (vla-get-tagstring a))
)
)
(strcase (vla-get-tagstring a))
(vla-get-textstring a)
(progn (vla-put-textstring a "") a)
)
)
(vl-remove-if-not
'(lambda ( a )
(wcmatch (strcase (vla-get-tagstring a))
"REV#,R#DESC,R#BY,R#CHK,R#DATE"
)
)
(vlax-invoke
(vlax-ename->vla-object (ssname s (setq i (1- i))))
'getattributes
)
)
)
(lambda ( a b ) (= (car a) (car b)))
)
)
'(lambda ( a b ) (> (caar a) (caar b)))
)
)
(vl-remove-if '(lambda ( x ) (vl-every '(lambda ( y ) (= "" (caddr y))) x)) a)
)
)
)
(princ)
)
;; Group By Function - Lee Mac
;; Groups items considered equal by a given predicate function
(defun LM:groupbyfunction ( lst fun / tmp1 tmp2 x1 )
(if (setq x1 (car lst))
(progn
(foreach x2 (cdr lst)
(if (fun x1 x2)
(setq tmp1 (cons x2 tmp1))
(setq tmp2 (cons x2 tmp2))
)
)
(cons (cons x1 (reverse tmp1)) (LM:groupbyfunction (reverse tmp2) fun))
)
)
)
(vl-load-com) (princ)
|