Thankyou for your input.
Here is a complete routine that select the nth block in a long linear of blocks
(defun c:TEST (/ myset fuzz response Lst LstNth ListOrder sset index name ent p1 p2 ListOrder n)
(setq mySet nil)
(setq Lst nil)
(setq fuzz (* 0.001 (getvar "dimscale")))
(setq myset (ssadd))
(if (null default)
(setq default "L")
)
(setq response nil)
(while (not (ok_response_test response))
(setq response
(strcase
(getstring
(strcat
"\nSorting from [L]eft, [R]ight, [T]op, [B]tm <" default ">: "
)
)
)
)
(if (ok_response_test response)
(if (equal response "")
(setq response default)
(setq default response)
)
(prompt "\n**Your Entry was Invalid, Please Re-enter...")
)
)
(if (/= (type #n) 'STR)(setq #n "3"))
(initget 6)
(if (setq n (getint (strcat "\nEnter the Selection Interval, ie 3 for Every Third Item: <"#n ">: ")))
(setq #n (itoa n))
(setq n (atoi #n))
)
(prompt "\nSelect All Block Along the Layout")
(setq sset (ssget '((0 . "INSERT"))))
(setq Index 0)
(while (< Index (sslength sset))
(setq Lst (cons (cdr (assoc 10 (entget (ssname sset Index)))) Lst)
Index (1+ Index)
)
)
(cond
((= response "L") (setq ListOrder (vl-sort Lst '(lambda (p1 p2) (< (car p1) (car p2)))))
(setq LstNth (Every-Nth-Item n ListOrder))
);;;x sort
((= response "R") (setq ListOrder (vl-sort Lst '(lambda (p1 p2) (< (car p1) (car p2)))))
(setq LstNth (Every-Nth-Item n (reverse ListOrder)))
);;;-x sort
((= response "T") (setq ListOrder (vl-sort Lst '(lambda (p1 p2) (< (cadr p1) (cadr p2)))))
(setq LstNth (Every-Nth-Item n (reverse ListOrder)))
);;;y sort
((= response "B") (setq ListOrder (vl-sort Lst '(lambda (p1 p2) (< (cadr p1) (cadr p2)))))
(setq LstNth (Every-Nth-Item n ListOrder))
);;;-y sort
)
(setq index 0)
(while (< index (sslength sset))
(setq name (ssname sset index))
(setq ent (entget name))
(setq p1 (cdr (assoc 10 ent)))
(if (IsPtInList p1 LstNth fuzz)
(setq myset (ssadd name myset))
)
(setq index (1+ index))
)
(sssetfirst nil myset)
(princ))
;;;============================================
(defun ok_response_test (response)
(if (or (= response "L")
(= response "R")
(= response "T")
(= response "B")
(= response "")
)
t
nil
)
)
;;;============================================
(defun IsPtInList (pt pointlist fuzz)
(vl-some
'(lambda (p)
(equal pt p fuzz)
)
pointlist
)
)
;;;============================================
(defun Every-Nth-Item ( n ListOrder / i )
(setq i 0)
(vl-remove-if-not '(lambda ( x ) (zerop (rem (setq i (1+ i)) n))) ListOrder)
)