목록으로

기본 변수 이해하기

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를 생성 후 코드를 작성합니다.

  1. Array 생성

예시:

!arr = array()
  1. 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'
  1. 혼용하여 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'
  1. 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'