Share
Sign In
PML BASIC
PML Beginner 5 - .(Dot)
B
Bito
👍
PML Beginner 마지막 글입니다.
PML Basic 부터는 Object 에 대한 설명을 시작할 예정인데 Object에 대해 설명하기 전
.(Dot) 에 대해 설명을 하고 넘어가야 할 것 같아 작성하였습니다.
.(Dot) 을 사용해야하는 이유
우선 PML에서는 PML1 PML2 둘다 혼용하여 사용합니다. 자세하게 설명하긴 그렇고 간단히
VAR 을사용하면 PML1 = 을 사용하면 PML2 라고 생각하면 좋을 것 같습니다.
예를들어 PIPE를 COLLECT를 해보겠습니다
PML1을 이용한 PIPE Collect
예시:
VAR !A EVAL NAME FOR ALL WITH MATCHWILD(NAME,'*TEST*') PIPE FOR CE
PML2을 이용한 PIPE Collect
예시:
!collection = OBJECT COLLECTION() !Collection.SCOPE(CE) !Collection.TYPE('PIPE') !Collection.FILTER(OBJECT EXPRESSION(|MATCHWILD(NAME,'*TEST*')|)) !A = !Collection.RESULTS()
이렇게 PML1을 이용할경우 한 줄로 코딩이 가능하지만 PML2를 이용하면 5줄이나 사용해야합니다.
뿐만 아니라 결과에서도 큰 차이가 있습니다
PML1 결과:
<string> '/TEST1' <string> '/TEST2' <string> '/TEST3' <string> '/TEST4' <string> '/TEST5'
PML2 결과:
<dbref> '123456/1' <dbref> '123456/2' <dbref> '123456/3' <dbref> '123456/4' <dbref> '123456/5'
즉 PML1을 사용시 !A 에 바로 NAME 값이 할당되지만 PML2를 사용시 dbref 값이 할당되기에 DO문을 사용하여 다시 Name으로 변환해주는 작업이 필요합니다.
!!collectAllFor을 사용하면 큰 차이가 안난다고 하지만 그럼에도 불구하고 Name으로 변환하는 작업은 필요합니다.
이렇게 간단한 작업에 있어서는 PML1을 사용하는것이 간편한 경우가 있습니다.
다만 코드가 점점더 복잡해 질수록 PML2를 이용한 코딩이 훨신 가독성이 좋아집니다.
예를들어 아래와 같은 상황이라고 가정을 해보겠습니다.
1.
모든 BRANCH MEMBER 들을 COLLECT 합니다.
2.
결과값은 각 BRAN MEM의 STEXT값을 ‘ ’ 로 나눈것에서 2번째값 과 BRAN MEM의 NAME 에서 ‘-’를 제거한 값을 하나로 합친 문자열을 !Arraytest 라는 Array에 append합니다.
PML1 위주의 코딩 예시:
VAR !branmems COLL ALL BRAN MEM FOR CE !Arraytest = ARRAY() DO !branmem values !branmems $*Stext값 VAR !stext STEXT OF DETREF OF SPREF OF $!branmem $* 두번쨰로 나눈값 VAR !splitStext PART('$!stext' ,2) $* Branmem 이름 VAR !name name of $!branmem VAR !replaceName REPLACE('$!name','-','') VAR !result !splitStext + !replaceName !Arraytest.append(!result) ENDDO
PML2 위주의 코딩 예시:
!branmems = !!collectAllFor('BRAN MEM', ||, CE) DO !branmem values !branmems !stext = !branmem.spref.detref.stext.part(2) !name = !branmem.name.replace('-','') !Arraytest.append(!stext + !name) ENDDO
더욱 줄여본 예시:
!branmems = !!collectAllFor('BRAN MEM', ||, CE) !Arraytest = !branmems.EVALUATE(OBJECT BLOCK(|!branmems[!EvalIndex].spref.detref.stext.part(2) + !branmems[!EvalIndex].owner.name.replace('-','')|))
3개의 예시 모두 결과값은 같습니다.
조금더 간단한 상황에서의 예시를 보면
PML1 방식에서의 IF문:
IF MATCHWILD(!A, '*TEST*') EQ FALSE THEN
PML2 방식에서의 IF문:
IF !A.MATCHWILD('*TEST*').not() then
이렇게 간단한 상황에서도 조금 더 보기 좋게 바꿀 수 있습니다.
모든 상황에 .(dot)을 사용해야 한다는게 아닙니다.
다만 적절하게 간결하게 사용할 수 있는 부분에서는 사용하는게 가독성에 좋다고 생각합니다.
1. .(Dot) 을 이용한 속성 접근
PML2에서는 .을 사용하여 속성에 접근할 수 있습니다.
변수 타입이 dbref 타입이여야 합니다.
예시:
!A = =1237491/12 $* !A = CE 해도 DBREF 타입입니다. !NAME = !A.NAME !TYPE = !A.TYPE !P1BORE = !A.PPBO[1] !P2BORE = !A.PPBO[2] !P1CONN = !A.PPCO[1] !P2CONN = !A.PPCO[2]
2. METHOD 사용예시
!A 의 NAME 는 ' TESTPIPE1 '로 가정하겠습니다.
예시: DOT을 사용한 REPLACE 사용
!A = =1237491/12 !RESULT = !A.NAME.Replace('1','')
말고도 정말 많은 예시가 있겠지만 이제 PMLBasic 코스에서 설명할 예정이기에 여기까지 하도록 하겠습니다.
감사합니다.
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 Basic 3 - Object Real()
d
Bito
Pml Basic 2 - Object String()
Function Description Match(STRING) 문자열의 시작 위치를 찾습니다. MatchWild(STRING) 와일드카드( * 는 여러 문자, ? 는 한 문자)를 사용하여 문자열을 비교합니다. EQNoCase(STRING) 대소문자 구분 없이 문자열을 비교합니다. After(STRING) 문자열에서 가장 왼쪽에 있는 STRING 다음에 오는 부분 문자열을 반환합니다. Before(STRING) 문자열에서 가장 왼쪽에 있는 STRING 앞에 있는 부분 문자열을 반환합니다. Length() 문자열의 문자 수를 반환합니다. UpCase() 문자열을 대문자로 변환합니다. LowCase() 문자열을 소문자로 변환합니다. Replace(STRING1, STRING2) 문자열에서 모든 STRING1 를 STRING2 로 바꿉니다.
Bito
Pml Basic 1 - Object & Function
Pml Beginner와는 다르게 Basic 부분에서는 AVEVA에서 기본 제공하는 Object 및 Function 에 대해 설명할 예정입니다 순서대로 학습할 필요 없이 코딩하면서 필요하다 싶은 Object들만 읽으면 될 것 같습니다. Object란? PML은 객체 지향 개념을 사용하는 언어입니다. 여기서 객체 는 OBJECT를 말합니다. 여기서 OBJECT가 무엇이냐 하면 (STRING, REAL, ARRAY) 뿐만 아니라 (COLLECTION, TABLE, BLCOK)등 모든 데이터는 Object(객체)로 다루어집니다. 예를들어 설명해보겠습니다. String 객체 설명: |test1|, 'test2'와 같은 문자열은 String 객체로 취급됩니다. PML에서는 문자열도 객체로 간주됩니다. Real 객체 설명: 1, 2.5, 3 등은 Real 객체로, 실수 또는 정수 형태의 숫자를 의미합니다. Array 객체 설명: Array 객체는 각 인덱스에 다양한 유형의 객체(문자열, 숫자, 다른 배열 등)를 저장할 수 있는 자료 구조입니다. Collection 객체 설명: Collection 객체는 데이터베이스 요소를 필터링하거나 범위 내의 데이터를 모아서 Array 객체로 반환하는 역할을 합니다. 뿐만아니라 수많은 Object들이 있으며 원할경우 Object를 생성하여 사용하여도 됩니다. 결론적으로 말하면 PML에서의 Object란 데이터를 담고 있는 일종에 컨테이너 라고 생각하면 되고 메쏘드를 통해 다양한 작업을 수행할 수 있습니다. 1. Object 선언 선언 방법 : !변수 = Object Object이름() 예시: