안녕하십니까.
아래는 DWG내의 BLOCK개수를 세어서 CSV로 출력하는 LISP인데요,
현재는 CSV파일을 새로 OPEN하여, 수동으로 파일이름을 넣고 저장해야 하는 방식입니다.
이를 DWG이름을 따서 DWG가 저장된 경로에 출력을 CSV파일로 자동 생성되게 만들고 싶습니다.
즉 COUNT 명령만 내리면 DWG파일 이름을 딴 CSV파일이 생성되도록…
도움 주시면 매우 감사하겠습니다..
————————————————————————————————————————–
(defun c:COUNT (/ _doc nm ds b ly f lst fl op)
(vlax-for l (vla-get-layouts
(setq _doc
(vla-get-ActiveDocument (vlax-get-acad-object))))
(vlax-for o (vla-get-block l)
(if (and (eq (vla-get-objectname o) “AcDbBlockReference”)
(setq nm (vla-get-effectivename o))
(setq ds
(if (vlax-property-available-p
(setq b (vla-item (vla-get-blocks _doc) nm))
‘comments)
(vla-get-comments b)
“”)
)
(setq ly (vla-get-layer o))
)
(if (vl-some ‘(lambda (x)
(and (eq ly (car x))
(eq nm (cadr x))
(setq f x)
)
)
lst)
(setq lst (subst (list ly nm (1+ (caddr f)) ds) f lst))
(setq lst (cons (list ly nm 1 ds) lst))
)
)
)
)
(setq lst (vl-sort lst ‘(lambda (j k) (< (car j) (car k)))))
(cond ((not lst)
(alert “Couldn’t find any block in this drawing !!”))
((and (setq fl (getfiled “파일선택”
(getvar ‘DWGPREFIX)
“csv”
1))
(setq op (open fl “w”))
)
(write-line “Layer Name,Block Name,QTY” op)
(mapcar ‘(lambda (x)
(write-line
(strcat (car x)
“,”
(cadr x)
“,”
(itoa (caddr x))
“,”
(nth 3 x))
op))
lst)
(close op)
)
)
(princ)
)(vl-load-com)