Share
Sign In
PML BASIC
PML Beginner 3 - Collect
B
Bito
👍
PML 에서의 Collect
매번 하나하나 데이터를 ARRAY에 add 할수는 없기에 collect를 사용합니다.
크게 PML1 방식의 Collect와 PML2 방식의 Collect가 있으나 주로 PML2는 복잡하기에 PML1 위주로 설명드리도록 하겠습니다.
Beginner 이후 Object에 대한 설명 과정에서 PML2방식의 Collect에 대해 자세히 설명 드리겠습니다.
PML1 에서 Collect
PML1 에서 데이터를 COLLECT 하는 방법엔 2가지가 있습니다.
COLL 을사용하는것과 EVAL을 사용하는게 있습니다.
1.
COLL 을 이용한 COLLECT
구조: VAR (변수) COLL ALL (COLLECT TYPE) WITH (조건) FOR (COLLECT 할 Scope)
주의사항: (COLLECT TYPE) 과 WITH (조건) 과 FOR (조건) 은 생략할 수 있습니다.
주의사항: 다만 셋 모두 동시 생략은 불가능합니다 EX)
VAR !A COLL ALL 불가능
주의사항: COLL 사용시 모든 데이터는 string 타입의 refno 가 들어갑니다.
예시:
$* 존재하는 모든 PIPE를 COLLECT합니다. VAR !A COLL ALL PIPE $* 현재 선택하고있는 Element 하위에 존재하는 모든 PIPE를 COLLECT합니다. VAR !A COLL ALL PIPE FOR CE $* 현재 선택하고있는 Element 하위에 존재하는 모든 PIPE 중에서 BORE 값이 100MM와 같거나 큰 PIPE들을 COLLECT합니다. VAR !A COLL ALL PIPE WITH BORE GE 100MM FOR CE $* 존재하는 모든 PIPE 중에서 BORE 값이 100MM와 같거나 큰 PIPE들을 COLLECT합니다. VAR !A COLL ALL PIPE WITH BORE GE 100MM $* 존재하는 모든 PIPE 중에서 DDEPTH 값이 2 이상인 PIPE들을 COLLECT 합니다. VAR !A COLL ALL PIPE WITH DDEPTH GE 2 $* 존재하는 모든 Element 중에서 DDEPTH 값이 2 이상인 Element들을 COLLECT 합니다. VAR !A COLL ALL WITH DDEPTH GE 2
결과:
<ARRAY> [1] <STRING> '=1234286676/1' [2] <STRING> '=1234286676/2' [3] <STRING> '=1234286676/3' [4] <STRING> '=1234286676/4' [5] <STRING> '=1234286676/5' [6] <STRING> '=1234286676/6' [7] <STRING> '=1234286676/7' [8] <STRING> '=1234286676/8'
2.
EVAL 을 이용한 COLLECT
구조: 구조: VAR (변수) EVAL NAME FOR ALL (COLLECT TYPE) WITH (조건) FOR (COLLECT 할 Scope)
$*구조 추가설명 $* 이렇게 하면 선택한 ITEM의 이름이 나옵니다. VAR !A EVAL NAME FOR CE $* 위 구문에 FOR ALL PIPE 를 추가해주면 선택한 PIPE의 이름이 나옵니다. VAR !A EVAL NAME FOR ALL PIPE FOR CE $* 물론 NAME 이 아닌 TYPE을 사용한다면 TYPE이 나옵니다... 아래처럼 하면 결과값에 PIPE 만 나옵니다 VAR !A EVAL TPYE FOR ALL PIPE FOR CE
주의사항: (COLLECT TYPE) 과 WITH (조건) 과 FOR (조건) 은 생략할 수 있습니다.
주의사항: 다만 셋 모두 동시 생략은 불가능합니다 EX) VAR !A EVAL NAME FOR ALL 불가능
주의사항: EVAL NAME FOR ALL 사용시 모든 데이터는 string 타입의 Name 가 들어갑니다.
예시:
$* 존재하는 모든 PIPE를 COLLECT합니다. VAR !A EVAL NAME FOR ALL PIPE $* 현재 선택하고있는 Element 하위에 존재하는 모든 PIPE를 COLLECT합니다. VAR !A EVAL NAME FOR ALL PIPE FOR CE $* 현재 선택하고있는 Element 하위에 존재하는 모든 PIPE 중에서 BORE 값이 100MM와 같거나 큰 PIPE들을 COLLECT합니다. VAR !A EVAL NAME FOR ALL PIPE WITH BORE GE 100MM FOR CE $* 존재하는 모든 PIPE 중에서 BORE 값이 100MM와 같거나 큰 PIPE들을 COLLECT합니다. VAR !A EVAL NAME FOR ALL PIPE WITH BORE GE 100MM $* 존재하는 모든 PIPE 중에서 DDEPTH 값이 2 이상인 PIPE들을 COLLECT 합니다. VAR !A EVAL NAME FOR ALL PIPE WITH DDEPTH GE 2 $* 존재하는 모든 Element 중에서 DDEPTH 값이 2 이상인 Element들을 COLLECT 합니다. VAR !A EVAL NAME FOR ALL WITH DDEPTH GE 2
결과:
<ARRAY> [1] <STRING> '/TEST1' [2] <STRING> '/TEST2' [3] <STRING> '/TEST3' [4] <STRING> '/TEST4' [5] <STRING> '/TEST5' [6] <STRING> '/TEST6' [7] <STRING> '/TEST7' [8] <STRING> '/TEST8'
PML2에서 Collect
PML2에서는 COLLECTION() 이라는 OBJECT를 이용하여 COLLECT 합니다.
자세히 설명하기에는 아직 OBJECT에 대한 설명도 안하였고 PML2를 이용한 객체지향에 대한 설명도 안하였기에
Beginner 이후 자세히 설명하도록 하겠습니다.
아래와 같이 사용이 가능하며
PML1에 비해 복잡하지만
결과값이 DBREF이기에 PML2에서 . 으로 객체 속성접근이나 메쏘드 접근이 가능하다는점
여러 SCOPE를 지정 가능하다는 장점이 있습니다.
$* Object Collection 객체 생성 !collection = OBJECT COLLECTION() $* Scope설정 (WORLD, CE 도 가능 REF 타입만 와야함) !Collection.SCOPE(=123456783/27) $* 추가적으로 특정 영역을 포함하도록 설정(생략가능) !Collection.addscope(=4152461/2) $* TYPE 설정 !Collection.TYPE('PIPE') $* 조건 설정 (생략가능) !Collection.FILTER(OBJECT EXPRESSION(|BORE GT 100MM|)) $* 결과값 RETURN !A = !Collection.RESULTS() Q VAR !A
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 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이름() 예시:
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 예시: 이 예시에서: