Here you go, the idea behind coding the program this way seems insane and different.
(defun c:exppl (/ ss fl op nr e a l)
;;----------------------------------------------------;;
;; Author : Tharwat Al Choufi ;;
;; website: https://autolispprograms.wordpress.com ;;
;;----------------------------------------------------;;
(initget 6)
(or (setq nr (getint "\nNumber of first point <1> : "))
(setq nr 1)
)
(princ "\nSelect polylines :")
(and
(setq ss (ssget ":S" '((0 . "LWPOLYLINE,POLYLINE"))))
(setq fl (substr (getvar "dwgname")
1
(- (strlen (getvar "dwgname")) 4)
)
)
(setq op (open (strcat (getvar "dwgprefix") fl "_exppl.txt") "w"))
(progn
((lambda (i / g m p d)
(while (setq e (ssname ss (setq i (1+ i))))
(setq g (entget e)
a (assoc 10 g)
m (cdr (cddddr (member a g)))
g (append g (list a))
a (cdr a)
l nil
)
(or l (setq l a))
(mapcar
'(lambda (x)
(and (= (car x) 10)
(setq p (cdr x))
(write-line
(strcat (itoa nr) "," (rtos (cadr a) 2 3) "," (rtos (car a) 2 3) "," (rtos (distance a p) 2 3))
op
)
(setq nr (1+ nr)
a p
)
)
)
m
)
(write-line
(strcat (itoa nr) "," (rtos (cadr a) 2 3) "," (rtos (car a) 2 3) "," (rtos (distance a l) 2 3)) op
)
(setq nr (1+ nr))
(foreach itm (list (list "Perimeter = "
(vlax-curve-getdistatparam
e
(vlax-curve-getendparam e)
)
)
(list "Area = " (vlax-curve-getarea e))
)
(write-line (strcat (car itm) (rtos (cadr itm) 2 3)) op)
)
)
)
-1
)
(close op)
)
)
(princ)
) (vl-load-com)