你可以试试这个:-
- (defun c:impnt (/ str->list a b c cm d s)
- (defun str->list (str / b)
- (foreach x (reverse (vl-string->list str))
- (cond ((eq x 44) (setq b (cons (list x) b)))
- (t
- (if (not b)
- (setq b (cons (list x) b))
- (setq b (cons (cons x (car b)) (cdr b)))
- )
- )
- )
- )
- (setq b (mapcar '(lambda (x) (vl-list->string (vl-remove 44 x))) b))
- (if (and (> (length b) 1)
- (numberp (read (car b)))
- (numberp (read (cadr b)))
- (numberp (read (caddr b)))
- )
- (list (atof (car b)) (atof (cadr b)) (atof (caddr b)))
- )
- )
- (if
- (and (setq
- a (getfiled "Select CSV File" (getvar "dwgprefix") "txt;csv" 16)
- )
- (setq s (getdist "\nSpecify Point Size : "))
- (setq a (open a "r"))
- (setq c (while (setq b (read-line a))
- (setq c (cons (str->list b) c))
- )
- )
- )
- (progn
- (close a)
- (setq cm (getvar 'cmdecho))
- (setvar 'cmdecho 0)
- (setvar 'pdmode 35)
- (setvar 'pdsize s)
- (setq d (ssadd)
- c (vl-remove nil c)
- )
- (foreach x c
- (ssadd (entmakex (list (cons 0 "POINT")
- (cons 62 3)
- (cons 10 x)
- )
- )
- d
- )
- )
- (ssadd (entmakex
- (append (list (cons 0 "LWPOLYLINE")
- (cons 100 "AcDbEntity")
- (cons 100 "AcDbPolyline")
- (cons 90 (length c))
- (cons 70 1)
- )
- (mapcar (function (lambda (p) (cons 10 p))) c)
- )
- )
- d
- )
- (command "_.zoom" "_o" d "")
- (setvar 'cmdecho cm)
- (sssetfirst nil d)
- )
- )
- (princ)
- )
TXT/CSV格式应该是这样的。程序自动跳过标题。
- Easting (x),Northing (Y),Elevation (Z)
- 373247.97,2051482.34,0
- 373271.02,2051446.02,0
- 373215.57,2051471.86,0
- 373210.14,2051497.24,0
|