필요한 곳이 있어서 만든 리습 입니다.
적용 예는 a102b31라는 text에서 제일 마지막 두자리를 제가 원하는 값[ex)10] 으로 바꾸고 곧바로 다음 객체 선택시 처음 입력한 값에 +1 씩[(11이 되겠죠?)] 계속 진행되는 리습입니다.
한가지 기능을 더 추가하고 싶은데 도무지 모르겠네요
만약 a102b31 을 제가 a102b10로 수정하고 리습명령을 종료한후에 다시 명령을 실행했을때
저 10라는 값이 그대로 남아 객체 선택시 a102b11으로 나타났으면 합니다..
고수님들의 도움이 필요해요..
(defun c:textlist1 ()
(setq change (getstring “대체 값”))
(setq change1 (atoi change))
(while (> 10000 change1)
(setq se (ssget)) ;객체 선택
(setq ss (cdr (setq sss(assoc 1 (setq ssss (entget (ssname se 0))))))) ;ss(최종 text) sss(1. text) ssss(객체엔티티)
(setq count (strlen ss)) ; repeat 횟수를 text글자수 만큼 지정
(setq step 1)
(setq head “” tail “” return nil) ; head 리스트 앞부분 tail 리스트 뒷부분
(setq b “b”) ;리스트 나누기 위한 변수 (수정 필요)
(repeat count
(if (< 47 (ascii (setq return (substr ss step 1))) 58) ;if문 조건 (아스키코드 사용 47~58사이 즉 0~9 사이 숫자가 맞으면 true)
(setq tail (strcat tail return)) ;true실행문 (숫자를 tail 리스트 함에 넣는다)
(if (= return b) ;if문 nil 값나올경우 실행 (text탐색중 b가 나오면 true)
(progn
(setq head (list head) tail (list tail))
(setq list1 (append head tail))
(setq head “” tail “”)
(setq head (strcat head return))
) ;true 실행문
(setq head (strcat head return))) ;nil 실행문
) ;if문 끝
(setq step (1+ step))
) ;repeat 끝
(setq head (list head) tail (list tail))
(setq list2 (append head tail))
(setq list1 (list list1) list2 (list list2))
(setq listall (append list1 list2))
(setq final (cadr(nth 1 listall)))
(setq final (itoa change1))
(setq list1a (car (car list1))
list1b (cadr (car list1))
list2a (car (car list2))
list2b (cadr (car list2)))
(setq newlist (strcat list1a list1b list2a final))
(setq ssss (subst (cons 1 newlist) sss ssss)) ;ss(최종 text) sss(1. text) ssss(객체엔티티)
(entmod ssss)
(setq change1 (1+ change1)))
(princ))
뭐하남 ,수야12 님
감사합니다~~^^
리습은 정말 어렵네요… 허허허ㅓ…
eq랑 =랑 같습니다
별 의미는 없습니다 흔히 암호 설정할때 특수문자 사용하듯 전 전역변수에는 충돌을 피하기 위해 보통 사람들이 잘 사용하지 않는 특수문을 넣어요 그래야 리습이 많아져 전역변수가 여러개라도 충돌할 가능성이 적어 지겠죠 ^^;;
정~~ 말 .. 죄송한데 .. 코딩된거를 보다보니 .. 또 의문이 생기네요,,,
처음에는 @change 에서 @가 그냥 아무 기능이 없는 문자인줄 알았는데
추가된 것들을 로드 해보다보니
이게 또 어떤 기능이 있는 기호인가 보네요 ..
역시나 또 아무곳에도 나와있지를 않아서 또 여쭤봅니다
수야님 감사합니다 ^^
정말 답답했었거든요 물어볼곳이 없어서.. ㅠㅠ
덕분에 또 새로운것들을 배워가네요 ^^
설명서에 이렇게 나와 있네요
eq 두 표현식이 동일한지 결정합니다.
(eq expr1 expr2)
지역변수 사용 제일 중요한 이유는 나중에 사용리습이 많아지면 같은 이름의 변수끼리 충돌하여 엉뚱한 값을 반환 하겠죠 ^^;;
한가지만더요!!
eq함수는 어떤 기능을 하는 함수인가요??
너무 감사합니다 수야님 ㅜㅜ
리습관련 책이 한권 있긴한데 그쪽에는 지역변수랑 광역변수에 관한 설명이 없네요..
단순히 지역변수 설정시 메모리를 덜 잡아먹고 뭐.. 이런 차이점 말고 꼭 써야하는 이유같은게 있나요 ??
궁금해서 또 여쭤봅니다.. ㅎㅎ
^^;; 제가 새로 넣은 변수중 @change 빼고 전부 지역변수로 설정하시는 습관을…