제 질의에 관심가져주셔서 감사드려요
텍스트 파일에 저장해서 캐드파일로 가져오는 리습을 짜고 있는데
궁금한점이 있어서 질의남깁니다.
기존 다른분이 해주신 거에 대한 답변보고 참고해서 하고 있는데
( https://www.gocad.co.kr/?mid=qa_cad&search_target=title&search_keyword=txt+%ED%8C%8C%EC%9D%BC&page=1&division=-2648989&document_srl=2495381 )
——————————————–
남은 문제는 txt_를 숫자로 바꿔주는 것이죠.
저는 리스트로 바꾸는 것을 좋아 합니다. 한줄을 통째로 기억하세요.
(setq list_num (read (strcat “(” txt_ “)”)))
제가 결정한 데이타 파일의 입력방법은 x y z w b h 6개의 숫자이므로
순서대로 0 1 2 3 4 5입니다.
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
9.좌표계산
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
10.좌표계산을 결합하면 아래와 같습니다.
(defun c:sol_box()
(setq file_r (open 파일명 “r”))
(while (setq txt_ (read-line file_r))
(setq list_num (read (strcat “(” txt_ “)”)))
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
(command “box” “c” p0 p1 H)
);while
(close file_r)
(princ)
);defun
11.데이타 파일을 만들고 파일명 에 위치를 기록해야 합니다.
저는 임의로 “c:\sol_box.txt”로 만들었습니다.
리습에서는 디렉토리구분문자를 \두개를 사용해야 합니다.
12. 완성되엇지만 command를 사용할 때는 오스냅을 꺼줘야합니다.
이것도 세줄을 외우시기 바랍니다.
(setq os_n (getvar “osmode”))
(setvar “osmode” 0)
……………………………………..
(setvar “osmode” os_n)
13.맨 마지막으로는 setq 에서 사용한 변수를 지우기 위하여 defun 으로 만든 함수명의 괄호안에
/를 하고 뒤에 사용한 변수명을 넣어주면 됩니다.
(defun c:sol_box(/ os_n file_r txt_ list_num x y z w b h p0 p1 )
(setq os_n (getvar “osmode”))
(setvar “osmode” 0)
(setq file_r (open “c:\sol_box.txt” “r”))
(while (setq txt_ (read-line file_r))
(setq list_num (read (strcat “(” txt_ “)”)))
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
(command “box” “c” p0 p1 H)
);while
(close file_r)
(setvar “osmode” os_n)
(princ)
);defun
———————————————————————————–
기존 다른분 질의에서보면 nth1~nth5까지 실수
txt파일 내용이 정수, 실수 , 문자는 어떻게 구분해줘야 하나요?
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
한이후에 정수 실수 문자라고 다시 정의해줘야하는건가요?
문자같은경우에는 txt파일에 따옴표(“”)를 넣으니 문자로 인식하긴하던데
아시는문 답변부탁드려요 미리 감사드립니다.
말키리Lv.0
text 파일 input 관련
공유
위 리습을 그대로 적용 햇을경우의 만약에 읽어 들이 내용이 123 456 789 10 abc 20 이면
(read(strcat “(” txt “)”)) 얘를 통해 내용이 (123 456 789 10 abc 20) 이라는 리스트로 바뀝니다
이미 변환이 된 상태란 뜻이죠 단 abc만 문자가 아닌 심벌로 인식되니 이것만 문자로 변환하시면 됩니다
알아서변화되는 줄알았는데 오류나서요
그냥read 로 읽으면 알아서 변롼됩니다