Excuse me if I'm way off, but give this a try. Make a selection of your text from the ' FT ' column to the ' REV ' column. You will have to deal with the formatting of fractions.
(defun c:foo (/ _dxf _mod _ss2l h l l1 p result tmp txt x)
(defun _ss2l (ss / n result)
(if (= (type ss) 'pickset)
(repeat (setq n (sslength ss)) (setq result (cons (ssname ss (setq n (1- n))) result)))
)
)
(defun _dxf (code ename)
(if (and ename (= (type ename) 'ename))
(cdr (assoc code (entget ename '("*"))))
)
)
(defun _mod (ename code value)
(if (and ename (= (type ename) 'ename))
(entmod (subst (cons code value) (assoc code (entget ename)) (entget ename)))
)
)
(if
(setq l (mapcar (function (lambda (x) (cons (_dxf 10 x) x))) (_ss2l (ssget '((0 . "text"))))))
(progn (while (setq txt (car l))
;; Insertion point
(setq p (car txt))
;; 1/2 Text Height for fuzz
(setq h (* 0.5 (_dxf 40 (cdr txt))))
;; Sort lines by Y coord then X coord
(setq tmp (vl-sort (vl-remove-if-not '(lambda (x) (equal (cadr (car x)) (cadr p) h)) l)
'(lambda (a b) (< (caar a) (caar b)))
)
)
;; Create list of lines
(setq result (cons tmp result))
;; Remove from list
(mapcar '(lambda (x) (setq l (vl-remove x l))) tmp)
)
;; Sort lines from top to bottom and remove insertion points
(setq result (mapcar '(lambda (x) (mapcar 'cdr x))
(vl-sort result '(lambda (a b) (> (cadr (caar a)) (cadr (caar b)))))
)
)
;; Process the lines
(while (setq tmp (cadr result))
(setq l1 (car result))
(if (and (= (_dxf 1 (car l1)) "-") (= (_dxf 1 (cadr l1)) "-"))
(setq result (cddr result))
(progn (_mod (caddr tmp)
1
(strcat (if (= (_dxf 1 (caddr tmp)) "-")
""
(strcat (_dxf 1 (caddr tmp)) " ")
)
(vl-princ-to-string
(+ (* 12. (atof (_dxf 1 (car l1))))
(if (distof (_dxf 1 (cadr l1)))
(distof (_dxf 1 (cadr l1)))
0
)
)
)
" LG"
)
)
(_mod (car l1) 1 "-")
(_mod (cadr l1) 1 "-")
(setq result (cddr result))
)
)
)
)
)
(princ)
)