(DEFUN C:rrr () (4-CALCULATION11 “++”))
(DEFUN 4-CALCULATION11 (4-TEXT / Z SS SNO NO TNO TOT X ENTITY ETYPE NUM H PT HH TXTHEI A B C D TEA 4-TEXT STR-L
NFF NFF-I TEMP VAL N VAL-1)
((= 4-TEXT “++”)
(IF (OR (= PLUS NIL) (= PLUS “”)) (SETQ PLUS 1))
(PROMPT “n SELECT TEXT: “)
(SETQ SS (SSGET ‘((0 . “TEXT,MTEXT”)))
SNO (SSLENGTH SS)
NO 0
IN-P (GETREAL (STRCAT “n 더할 숫자 를 입력 (“(RTOS PLUS)”): “))
)
(IF (/= IN-P NIL) (SETQ PLUS (FIX IN-P))) ;; PLUS 더할 숫자
(REPEAT SNO
(SETQ ENTITY (ENTGET (SSNAME SS NO))
NO (1+ NO) VAL NIL
NUM (CDR (ASSOC 1 ENTITY))
)
(COND ((= (WCMATCH NUM “-?#,?#”) T) (SETQ TOT (RTOS (+ (ATOF NUM) PLUS)))) ;;숫자로된 것이면 그냥 더하라.
((= (WCMATCH NUM “*#*”) T) ;;AAA 11 BB 문자 사이에 숫자 증감
(SETQ VAL “” TEMP “” STR-L “” N 1) ;;값 초기화
(REPEAT (STRLEN NUM)
(SETQ NFF (SUBSTR NUM N 1)
N (+ N 1)
)
(COND ((= (WCMATCH NFF “#”) T)
(SETQ VAL (STRCAT VAL NFF))
)
((= VAL “”) ;;숫자 앞의 문자
(SETQ TEMP (STRCAT TEMP NFF))
)
((/= VAL “”) ;; 숫자 뒤의 문자
(SETQ STR-L (STRCAT STR-L NFF))
)
)
);; REPEAT
(SETQ TOT (STRCAT TEMP (RTOS (+ (ATOI VAL) PLUS)) STR-L))
)
((= (WCMATCH NUM “~*#*”) T) ;;문자로 됬다면
(SETQ STR-L (STRLEN NUM)
VAL (ASCII (SUBSTR NUM 1 1))
VAL-1 NIL
)
(COND ((AND (>= VAL 65) (<= VAL 90)) (SETQ NFF-I 64)) ;; 1=A 2=B .... 26=Z
((AND (>= VAL 97) (<= VAL 122)) (SETQ NFF-I 96))
)
(COND ((> STR-L 1) ; AA
(SETQ NFF (- (ASCII (SUBSTR NUM 1 1)) NFF-I)) ;; AB => A(NFF) B(VAL)
(SETQ VAL (- (ASCII (SUBSTR NUM 2 1)) NFF-I))
)
((= STR-L 1) ; A
(SETQ NFF 0) ;; 숫자
(SETQ VAL (- (ASCII (SUBSTR NUM 1 1)) NFF-I))
)
)
(COND ((AND (= (MINUSP PLUS) t) (<= VAL (ABS PLUS))) (SETQ VAL-1 (+ PLUS VAL))) ;; 앞의 숫자를 빌릴지를 찾는다
((= VAL-1 NIL) (SETQ VAL (+ VAL PLUS))) ;;뒷 자리수를 더한다 일반상황
)
(COND ((/= 0 (FIX (/ VAL 26))) ; 더하기 할때
(SETQ NFF (+ NFF-I (+ NFF (FIX (/ VAL 25)))) ;; 앞에 문자에 더할값을 구하고 앞의 문자 값
VAL (+ NFF-I (FIX (REM VAL 25))) ;; 뒤문자에 더하고 남은 값을 구하고 뒤 문자 값
)
)
((= 0 (FIX (/ VAL 26))) ; 빼기 할때
(COND ((= VAL-1 NIL) ;; 빼기할숫자가 작아서 앞에 숫자 않빌릴때
(SETQ NFF (FIX (+ NFF-I NFF))
VAL (FIX (+ NFF-I VAL))
)
)
((/= VAL-1 NIL) ;;앞의 숫자 뺄때
(SETQ NFF (- NFF 1)
VAL (FIX (+ NFF-I (+ (+ VAL 26) PLUS)))
)
(COND ((< NFF 1) (SETQ NFF 0)) ;; 앞에 숫빼서 - 가 될때 공백
((>= NFF 1) (SETQ NFF (FIX (+ NFF-I NFF)))) ;; 뒤숫자 문자값
)
)
)
)
)
(COND ((AND (<= NFF 0) (<= VAL 0)) (SETQ NFF 63 VAL 63)) ;; 모두빼서 아무것두 없으면 ?? 표기
((= NFF NFF-I) (SETQ NFF 0)) ;; 문자가 하나일때 앞에 문자가 비어잇게 하기위해
)
(SETQ TOT (STRCAT (CHR NFF) (CHR VAL))) ;; 합치기
)
);COND
(ENTMOD (SUBST (CONS 1 TOT) (ASSOC 1 ENTITY) ENTITY))
);; REPEAT
)
)
********************** 오류 내용 입니다. *********************
[Cad]
명령: rrr
SELECT TEXT:
객체 선택: 반대 구석 지정: 6개를 찾음
객체 선택:
더할 숫자 를 입력 (1):
ERROR : 잘못된 함수: T
[Visual Lisp]
LOG 오류 추적
……………
<1> :ERROR-BREAK
[2] (T nil nil nil nil ((-1 . <도면요소 이름: 7ef6af88>) ……
[3] (4-CALCULATION11 “++”)
[4] (C:RRR)
<5> :CALLBACK-ENTRY
<6> :ARQ-SUBR-CALLBACK