기본 변수 이해하기
PML Beginner 2
PML에서의 변수
변수 간단하게 말하면 값을 저장할수있는 저장공간 입니다.
PML에서 변수에는 string, real, array, file, datetime, 등 각종 object들이 들어갈수 있습니다.
Object에 대한 자세한 설명은 초급 과정 이후 추후 자세히 설명하도록 하겠습니다
Beginner에서는 제일 많이 사용하는 string, real, array 만 설명하도록 하겠습니다.
1. PML에서 변수를 선언하는법
PML에서 모든 변수는 ! 로 시작합니다.
PML1 변수 선언 예시
- 모든 값이 string 형태로 저장됩니다
예시
VAR !A 'Hello' $* 결과값 = (string)Hello
VAR !B 100 $* 결과값 = (string)100
VAR !C NAME $* 결과값 = (string) 현재 선택되어 있는 element 의 name값 TEST라 가정
VAR !D DDEPTH $* 결과값 = (string) 현재 선택되어 있는 element 의 ddepth값 ZONE 이라 가정
VAR !E position $* 결과값 = (string) 현재 선택되어 있는 element 의 position 값 0,0,10 가정
q var !A !B !C !D !E결과:
<STRING> 'Hello'
<STRING> '100'
<STRING> '/TEST'
<STRING> '2'
<STRING> 'E 0mm N 0mm U 10mm'PML2 변수 선언 예시
- 문자형 형태로 변수를 입력시 문자형, 숫자형 형태로 입력시 숫자형 값이 들어값니다
예시:
!A = 'Hello' $* 결과값 = (string)Hello
!B = 100 $* 결과값 = (real)100
!C = NAME $* 결과값 = (string)현재 선택되어 있는 element 의 name값
!D = DDEPTH $* 결과값 = (real) 현재 선택되어 있는 element 의 TYPE값
!E = POS $* 결과값 = (position) 현재 선택되어 있는 element 의 Position 정보
q var !A !B !C !D !E결과:
<STRING> 'Hello'
<REAL> 100
<STRING> '/TEST'
<REAL> 2
<POSITION> E 0mm N 0mm U 0mm WRT /SITE1
EAST <REAL> 0mm
NORTH <REAL> 0mm
ORIGIN <DBREF> =1234567899/27
UP <REAL> 0mm지역변수와 전역변수
- 지역 변수:
!로 시작하며, 스크립트 내에서만 사용할수 있습니다. 즉 commandwidnow 에서 !a에 값을 할당했다고 해서 .mac파일 혹은 form에서 !a에 할당된 값을 사용이 불가능합니다. - 전역 변수:
!!로 시작하며, 프로그램 내에서 사용이 가능합니다. 즉 commandwidnow 에서 !!a에 값을 할당하면 .mac파일 혹은 form에서 !!a에 할당된 값을 사용이 가능합니다.
예시: (COMMAND WINDOW)
!A = 'Local var'
!!A = 'Global var'
Q VAR !A
Q VAR !!A결과:
<STRING> 'Local var'
<STRING> 'Global var'예시: 다른 macro파일을 불러올때
Q VAR !A
Q VAR !!A결과:
Undefined
<STRING> 'Global var'2. PML에서 변수를 사용하는법
PML에서는 변수의 앞에 $를 붙여서 변수의 값을 참조하여 사용할 수 있습니다.
PML1 에서의 변수사용
예시: 변수의 직접사용
VAR !A 'A'
VAR !B 'B'
VAR !C !A + !B
Q VAR !C결과:
<STRING> 'AB'예시1: 변수의 값을 참조하여 사용
VAR !A 'A'
VAR !B 'B'
VAR !C '$!A$!B'
Q VAR !C예시2:
VAR !A 'A'
VAR !B 'B'
VAR !C !A + '$!B'
Q VAR !C결과: 예시 1, 예시 2 모두 결과는 같습니다.
<STRING> 'AB'PML2 에서의 변수사용
예시: 변수의 직접사용
!A = 'A'
!B = 'B'
!C = !A + !B
Q VAR !C결과:
<STRING> 'AB'예시1: 변수의 값을 참조하여 사용
!A = 'A'
!B = 'B'
!C = '$!A$!B'
Q VAR !C예시2:
!A = 'A'
!B = 'B'
!C = !A + '$!B'
Q VAR !C결과: 예시 1, 예시 2 모두 결과는 같습니다.
<STRING> 'AB'3. 변수간 사칙연산
PML에서는 변수간 + - * / 가 가능합니다.
다만 PML1에서와 PML2에서 사칙연산시 다소 주의해야할 사항이 있습니다.
PML1 에서의 사칙연산
예시1:
VAR !A '1'
VAR !B 2
VAR !C !A + !B
Q VAR !A !B !C결과:
<STRING> '1'
<STRING> '2'
<STRING> '3'예시2: 변수 !B의 real 타입으로 값을 할당하기 위해 PML2를 사용하였습니다.
VAR !A '1'
!B = 2
VAR !C !A + !B
Q VAR !A !B !C결과:
<STRING> '1'
<REAL> 2
<STRING> '3'즉 PML1으로 변수에 값을 할당할때는 string 타입으로만 할당됩니다.
다만 변수안에 '숫자'만 존재할경우 string 타입이여도 real로 인식하고 계산합니다.
PML2 에서의 사칙연산
예시:
!A = 1
!B = 2
!C = !A + !B
Q VAR !A !B !C결과:
<REAL> 1
<REAL> 2
<REAL> 3예시2:
!A = 1
!B = '2'
!C = !A + !B $* 오류발생 (2,779) $* Method <REAL>.+(<STRING>) not found
Q VAR !A
Q VAR !B
Q VAR !C결과: 오류발생
<REAL> 1
<STRING> '2'
(2,779) Method <REAL>.+(<STRING>) not found즉 PML1 과 다르게 PML2의 경우 반드시 Real 타입이어야만 사칙 연산에 사용이 가능합니다.
4. String Real Array
가장 기초적이고 가장 많이 사용되는 String, Real, Array 에 대해 설명해보려고 합니다.
string과 array에 대한 예제는 생략하도록 하겠습니다.
1. STRING
말그대로 string(문자형) 입니다 '' 혹은 || 로 감싸서 표현하며, 문자열을 연결하거나 처리할 때 주로 사용됩니다.
2. Real
real(숫자형)은 소수점을 포함한 숫자, 즉 실수를 나타냅니다.
PML에서는 기본적으로 숫자형 데이터를 처리할떄 Real을 사용합니다.
double, int, float 등등은 사용되지 않습니다.
3. Array
기본적으로 Array(배열)은 여러 데이터를 처리할때 사용됩니다.
반드시 빈 Array를 생성해야하는건 아니지만 보통은 빈 Array를 생성 후 코드를 작성합니다.
- Array 생성
예시:
!arr = array()- Array 에 값 추가하기
보통은 .add()를 사용하거나 직접 값을 할당합니다.
예시: .add()를 이용한 Array값 추가
주의사항: .append()를 사용할때는 반드시 Array가 생성된 다음에 사용해야합니다.
!arr = array()
!arr.append('1')
!arr.append(2)
!arr.append('test')
q var !arr결과:
<ARRAY>
[1] <STRING> '1'
[2] <REAL> 2
[3] <STRING> 'test'예시: 직접 값을 할당 (반드시 Array를 생성할 필요는 없음)
!arr[1] = '1'
!arr[2] = '2'
!arr[3] = 'test'
var !arr[4] 'test2'
q var !arr결과:
<ARRAY>
[1] <STRING> '1'
[2] <STRING> '2'
[3] <STRING> 'test'
[4] <STRING> 'test2'- 혼용하여 Array 에 값 추가하기
- array에 직접 값을 할당할때 반드시 1,2,3,4,5,6 다 채워야 할 필요도 없으며 순서대로 하지 않아도 됩니다. (나중에 Do문 쓸때 문제가 되기때문에 다 채워놓는게 좋긴합니다.)
- 값을 직접 할당했을때 array가 자동 생성되므로 직접할당한 상태에서는 굳이 array를 안만들어도 됩니다.
- .add()사용시 가장 높을 순차로 생성됩니다.
예시:
!arr[3] = '1' $* 여기서 array생성됨
!arr[1] = '2'
!arr.append('add test1') $* 3까지 있으므로 2가 아닌 4로 들어갑니다.
!arr[5] = 'test'
var !arr[9] 'test2'
!arr.append('add test2')
q var !arr결과:
<ARRAY>
[1] <STRING> '2'
[3] <STRING> '1'
[4] <STRING> 'add test1'
[5] <STRING> 'test'
[9] <STRING> 'test2'
[10] <STRING> 'add test2'- Array에서 중간 값 삭제하기
.delete() 를 사용하여 지워주면 됩니다.
예시:
!arr = array()
!arr.append('1')
!arr.append(2)
!arr.append('test')
!arr[2].delete()
q var !arr결과:
<ARRAY>
[1] <STRING> '1'
[3] <STRING> 'test'