1. ;;;Gu_xl 的源码-原理:除去所有文字对象句柄后,遍历做比对!
    2. (defun C:duprem(/ a1 a2 a3 a4 delnum delss dlst edata elst ent ltest n num sle ss t0 t1 tes typa)
    3. (setq delnum nil delnum 0)
    4. (if (and (setq ss (ssget '((0 . "*TEXT")))) (= (type ss) 'PICKSET) (not (zerop (sslength ss))))
    5. (progn
    6. (setq n 0 num (sslength ss) elst nil dlst nil t0 (* 86400 (getvar "tdusrtimer")))
    7. (while (< n num)
    8. (setq ent (ssname ss n) edata (cdr (entget ent)) typa (cdr (assoc 0 edata)))
    9. (setq a1 (assoc 5 edata));;句柄
    10. (setq a2 (cons 5 ""));;句柄
    11. (setq edata (subst a2 a1 edata))
    12. (if (wcmatch (getvar "ACADVER") "*15*")
    13. (progn
    14. (setq a3 (assoc 330 edata));;句柄
    15. (setq a4 (cons 330 ""));;句柄
    16. (setq edata (subst a4 a3 edata))
    17. )
    18. )
    19. (setq elst (cons ent elst) dlst (cons edata dlst) n (+ n 1))
    20. )
    21. (setq delss nil delss (ssadd) ltest dlst)
    22. (setq n 0)
    23. (setq tes (car ltest) ltest (cdr ltest) num nil num (length ltest))
    24. (while (/= num 0)
    25. (if (member tes ltest)
    26. (progn
    27. (setq delss (ssadd (nth n elst) delss))
    28. (setq delnum (+ delnum 1))
    29. )
    30. )
    31. (setq n (+ n 1))
    32. (setq tes (car ltest) ltest (cdr ltest) num (length ltest))
    33. )
    34. (command "erase" delss "")
    35. (redraw)
    36. (setq t1 (* 86400 (getvar "tdusrtimer")))
    37. (princ (strcat "共耗时:" (rtos (- t1 t0) 2 3) "秒,共删除文字:" (itoa delnum) "个!"))
    38. )
    39. )
    40. (princ)
    41. )