Share
Sign In
PML BASIC
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'
Bi
Subscribe to 'bittokki'
Welcome to 'bittokki'!
By subscribing to my site, you'll be the first to receive notifications and emails about the latest updates, including new posts.
Join SlashPage and subscribe to 'bittokki'!
Subscribe
👍
Other posts in 'PML BASIC'See all
Bito
PML Beginner 5 - .(Dot)
PML Beginner 마지막 글입니다. PML Basic 부터는 Object 에 대한 설명을 시작할 예정인데 Object에 대해 설명하기 전 .(Dot) 에 대해 설명을 하고 넘어가야 할 것 같아 작성하였습니다. .(Dot) 을 사용해야하는 이유 우선 PML에서는 PML1 PML2 둘다 혼용하여 사용합니다. 자세하게 설명하긴 그렇고 간단히 VAR 을사용하면 PML1 = 을 사용하면 PML2 라고 생각하면 좋을 것 같습니다. 예를들어 PIPE를 COLLECT를 해보겠습니다 PML1을 이용한 PIPE Collect 예시: PML2을 이용한 PIPE Collect 예시: 이렇게 PML1을 이용할경우 한 줄로 코딩이 가능하지만 PML2를 이용하면 5줄이나 사용해야합니다. 뿐만 아니라 결과에서도 큰 차이가 있습니다 PML1 결과: PML2 결과: 즉 PML1을 사용시 !A 에 바로 NAME 값이 할당되지만 PML2를 사용시 dbref 값이 할당되기에 DO문을 사용하여 다시 Name으로 변환해주는 작업이 필요합니다. !!collectAllFor을 사용하면 큰 차이가 안난다고 하지만 그럼에도 불구하고 Name으로 변환하는 작업은 필요합니다. 이렇게 간단한 작업에 있어서는 PML1을 사용하는것이 간편한 경우가 있습니다. 다만 코드가 점점더 복잡해 질수록 PML2를 이용한 코딩이 훨신 가독성이 좋아집니다. 예를들어 아래와 같은 상황이라고 가정을 해보겠습니다. 모든 BRANCH MEMBER 들을 COLLECT 합니다.
Bito
PML Beginner 4 - 연산자, 조건문, 반복문
연산자와, 조건문, 반복문 이번엔 연산자, 조건문, 반복문 에 대해 설명해보도록 하겠습니다. 1. 연산자 1. 산술 연산자 기본적인 수학 연산을 수행할 때 사용되는 연산자들입니다. 더하기 (Addition): + 빼기 (Subtraction): - 곱하기 (Multiplication): * 나누기 (Division): / 예시: 결과: 2. 비교 연산자 두 값을 비교할 때 사용되는 연산자들입니다. 작다 (Less than): LT 크다 (Greater than): GT 같다 (Equal to): EQ 다르다 (Not equal to): NEQ 작거나 같다 (Less than or equal to): LE 크거나 같다 (Greater than or equal to): GE 예시: 이 예시에서:
Bito
PML Beginner 3 - Collect
PML 에서의 Collect 매번 하나하나 데이터를 ARRAY에 add 할수는 없기에 collect를 사용합니다. 크게 PML1 방식의 Collect와 PML2 방식의 Collect가 있으나 주로 PML2는 복잡하기에 PML1 위주로 설명드리도록 하겠습니다. Beginner 이후 Object에 대한 설명 과정에서 PML2방식의 Collect에 대해 자세히 설명 드리겠습니다. PML1 에서 Collect PML1 에서 데이터를 COLLECT 하는 방법엔 2가지가 있습니다. COLL 을사용하는것과 EVAL을 사용하는게 있습니다. COLL 을 이용한 COLLECT 구조: VAR (변수) COLL ALL (COLLECT TYPE) WITH (조건) FOR (COLLECT 할 Scope) 주의사항: (COLLECT TYPE) 과 WITH (조건) 과 FOR (조건) 은 생략할 수 있습니다. 주의사항: 다만 셋 모두 동시 생략은 불가능합니다 EX) VAR !A COLL ALL 불가능 주의사항: COLL 사용시 모든 데이터는 string 타입의 refno 가 들어갑니다. 예시: 결과: EVAL 을 이용한 COLLECT 구조: 구조: VAR (변수) EVAL NAME FOR ALL (COLLECT TYPE) WITH (조건) FOR (COLLECT 할 Scope) 주의사항: (COLLECT TYPE) 과 WITH (조건) 과 FOR (조건) 은 생략할 수 있습니다. 주의사항: 다만 셋 모두 동시 생략은 불가능합니다 EX) VAR !A EVAL NAME FOR ALL 불가능 주의사항: EVAL NAME FOR ALL 사용시 모든 데이터는 string 타입의 Name 가 들어갑니다. 예시: 결과: PML2에서 Collect PML2에서는 COLLECTION() 이라는 OBJECT를 이용하여 COLLECT 합니다. 자세히 설명하기에는 아직 OBJECT에 대한 설명도 안하였고 PML2를 이용한 객체지향에 대한 설명도 안하였기에 Beginner 이후 자세히 설명하도록 하겠습니다. 아래와 같이 사용이 가능하며 PML1에 비해 복잡하지만 결과값이 DBREF이기에 PML2에서 . 으로 객체 속성접근이나 메쏘드 접근이 가능하다는점 여러 SCOPE를 지정 가능하다는 장점이 있습니다.