Share
Sign In
PML BASIC
Pml Basic 5 - Object Array()
B
Bito
👍
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다
오류 있으면 댓글 달아주세요 추후 수정 예정입니다.**
Array
PML을 사용하는 이유가 반복적인 작업을 단순화하려는 만큼, Array는 매우 많이 사용됩니다. 기본적인 PML1 방식의 Array보다 PML2 방식의 Array를 이용하면 좀 더 효율적으로 PML을 작성할 수 있습니다. 1차원 배열과 2차원 배열을 PML1 방식과 PML2 방식으로 다뤄보도록 하겠습니다.
1. 1차원 배열
1차원 배열은 단일 리스트로, Element들이 하나의 차원에 배열됩니다. 예를 들어, ['apple','banana', 'cherry']와 같은 배열이 1차원 배열입니다. Array에 Append를 하기 전, 반드시 OBJECT ARRAY()로 배열을 우선 생성해야 합니다.
1.1 1차원 Array 생성 및 사용 (PML1)
PML1 방식에서는 배열을 생성한 후 .APPEND() 메서드를 사용해 Element를 추가합니다.
!array = OBJECT ARRAY() -- 1차원 배열 생성 !array.APPEND('apple') -- 첫 번째 Element 추가 !array.APPEND('banana') -- 두 번째 Element 추가 !array.APPEND('cherry') -- 세 번째 Element 추가 q var !array
배열 생성: OBJECT ARRAY()로 빈 배열을 생성합니다.
Element 추가: .APPEND() 메서드를 사용해 배열에 Element를 순차적으로 추가합니다.
Element 접근: 인덱스를 통해 배열 내 Element에 접근합니다. PML에서는 배열의 인덱스가 1부터 시작하므로 첫 번째 Element는 !array[1]으로 접근합니다.
1.2 1차원 Array 생성 및 사용 (PML2)
PML2 방식에서는 배열을 생성한 후 인덱스를 사용해 직접 값을 할당할 수 있습니다.
!array = OBJECT ARRAY() -- 1차원 배열 생성 !array[1] = 'apple' -- 첫 번째 Element 할당 !array[2] = 'banana' -- 두 번째 Element 할당 !array[3] = 'cherry' -- 세 번째 Element 할당 q var !array
배열 생성: OBJECT ARRAY()로 빈 배열을 생성합니다.
인덱스 할당: 배열의 각 위치에 인덱스를 통해 직접 Element를 할당합니다.
Element 접근: PML1 방식과 마찬가지로 배열의 Element는 인덱스를 사용해 접근합니다.
2. 2차원 배열
2.1 PML에서 2차원 배열 생성 및 사용
PML에서 2차원 배열은 배열 내에 배열을 추가하는 방식으로 구현됩니다. 이는 **행(row)**을 배열로 만들고, 이 행들을 또 다른 배열에 추가하는 방식으로 구성됩니다. PML1 방식과 PML2 방식 모두 이러한 구조를 지원하지만, 각 방식에는 차이가 있습니다.
2.2 PML1 방식
PML1에서는 배열을 생성한 후, 각 배열(행)을 배열에 추가하여 2차원 배열을 구성합니다. 여기서는 .APPEND() 메서드를 사용하여 배열에 Element를 추가합니다.
2.3 PML1 방식 2차원 배열 예시
-- 배열 생성 !oArray = OBJECT ARRAY() -- 2차원 배열 생성 !oRow1 = OBJECT ARRAY() -- 첫 번째 행 생성 !oRow2 = OBJECT ARRAY() -- 두 번째 행 생성 -- 첫 번째 행에 Element 추가 !oRow1.APPEND('Row1 Element1') !oRow1.APPEND('Row1 Element2') -- 두 번째 행에 Element 추가 !oRow2.APPEND('Row2 Element1') !oRow2.APPEND('Row2 Element2') -- 2차원 배열에 행 추가 !oArray.APPEND(!oRow1) !oArray.APPEND(!oRow2) -- Element 접근 q var !oArray
설명
배열 생성: OBJECT ARRAY()로 빈 배열을 생성하고, 각 행을 다른 배열로 만듭니다.
Element 추가: 각 행에 .APPEND() 메서드를 사용해 Element를 추가합니다.
배열에 배열 추가: 각 행(배열)을 2차원 배열에 .APPEND() 메서드로 추가합니다.
Element 접근: [행][열] 방식으로 접근합니다. 예를 들어 !oArray[1][1]은 첫 번째 행의 첫 번째 Element입니다.
2.4 PML2 방식
PML2에서는 인덱스를 통해 직접 배열의 각 위치에 Element를 할당하여 2차원 배열을 구성합니다. 이 방식은 좀 더 간편하게 2차원 배열을 구성할 수 있습니다.
2.5 PML2 방식 2차원 배열 예시
-- 배열 생성 !oArray = OBJECT ARRAY() -- 2차원 배열 생성 -- 인덱스를 사용해 Element 직접 할당 !oArray[1][1] = 'Row1 Element1' !oArray[1][2] = 'Row1 Element2' !oArray[2][1] = 'Row2 Element1' !oArray[2][2] = 'Row2 Element2' -- Element 접근 q var !oArray
설명
배열 생성: OBJECT ARRAY()로 빈 배열을 생성합니다.
인덱스 할당: 각 행과 열에 직접 Element를 할당합니다.
Element 접근: [행][열] 형식으로 Element에 접근할 수 있습니다. 예를 들어 !oArray[1][1]은 첫 번째 행의 첫 번째 Element입니다.
2.6 PML1 vs PML2 방식의 차이점
PML1 방식: .APPEND() 메서드를 사용하여 각 배열을 행으로 추가하고, 이를 다시 2차원 배열에 추가합니다. 행을 별도의 배열로 생성한 후 이를 추가하는 방식입니다.
PML2 방식: 인덱스를 사용해 직접 각 Element를 할당할 수 있습니다. 별도의 행을 만들지 않고, 바로 배열의 각 인덱스에 값을 지정합니다.
3. Array Method
3.1 APPEND()
기능: 배열의 끝에 새로운 Element를 추가합니다.
사용법: !array.APPEND(값)
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array.APPEND('Element2')
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[2] = 'Element2'
3.2 SIZE()
기능: 배열에 있는 Element의 개수를 반환합니다.
사용법: !size = !array.SIZE()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array.APPEND('Element2') !size = !array.SIZE()
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[2] = 'Element2' !size = !array.SIZE()
3.3 FIND()
기능: 배열 내에서 특정 값을 찾아 그 값의 인덱스를 반환합니다. 값이 없을 경우 빈 값을 반환합니다.
사용법: !index = !array.FIND(값)
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Apple') !array.APPEND('Banana') !array.APPEND('Cherry') !index = !array.FIND('Banana') $P 'Found at index: ' + !index.STRING() : 'Found at index: 2'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Apple' !array[2] = 'Banana' !array[3] = 'Cherry' !index = !array.FIND('Banana') $P 'Found at index: ' + !index.STRING() : 'Found at index: 2'
3.4 JOIN()
기능: 배열의 모든 Element를 특정 구분자로 결합하여 하나의 문자열로 반환합니다.
사용법: !joinedString = !array.JOIN(', ')
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Apple') !array.APPEND('Banana') !array.APPEND('Cherry') !joinedString = !array.JOIN(', ') $P 'Joined String: ' + !joinedString : 'Joined String: Apple, Banana, Cherry'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Apple' !array[2] = 'Banana' !array[3] = 'Cherry' !joinedString = !array.JOIN(', ') $P 'Joined String: ' + !joinedString : 'Joined String: Apple, Banana, Cherry'
3.5 CLEAR()
기능: 배열 내 모든 Element를 제거하여 배열을 초기화합니다.
사용법: !array.CLEAR()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array.APPEND('Element2') $P 'Before clear: ' + !array.SIZE().STRING() : 'Before clear: 2' !array.CLEAR() $P 'After clear: ' + !array.SIZE().STRING() : 'After clear: 0'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[2] = 'Element2' $P 'Before clear: ' + !array.SIZE().STRING() : 'Before clear: 2' !array.CLEAR() $P 'After clear: ' + !array.SIZE().STRING() : 'After clear: 0'
3.6 SORT()
기능: 배열을 오름차순으로 정렬합니다. 숫자나 문자열을 기준으로 정렬이 가능합니다.
사용법: !array.SORT()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Cherry') !array.APPEND('Apple') !array.APPEND('Banana') !array.SORT() q var !array
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Cherry' !array[2] = 'Apple' !array[3] = 'Banana' !array.SORT() q var !array
3.7 UNIQUE()
기능: 배열 내 중복된 Element를 제거하고, 배열을 재정렬합니다.
사용법: !array.UNIQUE()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Apple') !array.APPEND('Banana') !array.APPEND('Apple') !array.UNIQUE() $P 'Array Size after unique: ' + !array.SIZE().STRING() : 'Array Size after unique: 2'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Apple' !array[2] = 'Banana' !array[3] = 'Apple' !array.UNIQUE() $P 'Array Size after unique: ' + !array.SIZE().STRING() : 'Array Size after unique: 2'
3.8 DIFFERENCE()
기능: 두 배열 간의 차집합을 반환합니다. 첫 번째 배열에 존재하지만 두 번째 배열에 없는 Element들로 구성된 새로운 배열을 반환합니다.
사용법: !differenceArray = !array1.DIFFERENCE(!array2)
PML1 예시:
!array1 = OBJECT ARRAY() !array1.APPEND('a') !array1.APPEND('b') !array1.APPEND('c') !array2 = OBJECT ARRAY() !array2.APPEND('b') !array2.APPEND('c') !difference = !array1.DIFFERENCE(!array2) q var !array1 q var !array2 q var !difference
PML2 예시:
!array1 = OBJECT ARRAY() !array1[1] = 'a' !array1[2] = 'b' !array1[3] = 'c' !array2 = OBJECT ARRAY() !array2[1] = 'b' !array2[2] = 'c' !difference = !array1.DIFFERENCE(!array2) q var !array1 q var !array2 q var !difference
3.9 COMPRESS()
기능: 배열에서 빈 Element(정의되지 않은 Element)를 제거하고 배열을 재정렬합니다.
사용법: !array.COMPRESS()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array[3] = 'Element3' q var !array !array.COMPRESS() q var !array
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[3] = 'Element3' q var !array !array.COMPRESS() q var !array
3.10 LAST()
기능: 배열의 마지막 Element를 반환합니다.
사용법: !lastElement = !array.LAST()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array.APPEND('Element2') !lastElement = !array.LAST() $P 'Last Element: ' + !lastElement : 'Last Element: Element2'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[2] = 'Element2' !lastElement = !array.LAST() $P 'Last Element: ' + !lastElement : 'Element2'
3.11 FIRST()
기능: 배열의 첫 번째 Element를 반환합니다.
사용법: !firstElement = !array.FIRST()
PML1 예시:
!array = OBJECT ARRAY() !array.APPEND('Element1') !array.APPEND('Element2') !firstElement = !array.FIRST() $P 'First Element: ' + !firstElement : 'First Element: Element1'
PML2 예시:
!array = OBJECT ARRAY() !array[1] = 'Element1' !array[2] = 'Element2' !firstElement = !array.FIRST() $P 'First Element: ' + !firstElement : 'Element1'
3.12 SPLIT()
기능: 문자열을 주어진 구분자를 기준으로 분리하여 배열(Array)로 반환합니다.
사용법: !LIST = !TEXT.SPLIT('구분자')
예시:
!TEXT = |AA BB CC DD EE| -- 공백으로 구분된 문자열 !LIST = !TEXT.SPLIT(' ') -- 공백을 기준으로 문자열을 나누어 배열로 변환 q var !LIST $( 결과 !LIST[1] -- 출력: 'AA' !LIST[2] -- 출력: 'BB' !LIST[3] -- 출력: 'CC' !LIST[4] -- 출력: 'DD' !LIST[5] -- 출력: 'EE' $)
3.13 APPENDARRAY(ARRAY values)
기능: APPENDARRAY는 하나의 배열에 다른 배열의 요소들을 모두 추가합니다. 병합된 배열의 상태를 확인할 수 있습니다.
PML1 방식 예시:
!array1 = OBJECT ARRAY() !array2 = OBJECT ARRAY() !array2.APPEND('apple') !array2.APPEND('banana') !array1.APPENDARRAY(!array2) Q VAR !array1
결과:
Q VAR !array1 <array>1 : 'apple' <array>2 : 'banana'
PML2 방식 예시:
!array1 = OBJECT ARRAY() !array2 = OBJECT ARRAY() !array2[1] = 'apple' !array2[2] = 'banana' !array1.APPENDARRAY(!array2) Q VAR !array1
결과:
Q VAR !array1 <array>1 : 'apple' <array>2 : 'banana'
3.14 EVALUATE(BLOCK command)
설명: Evaluate 메서드는 배열의 각 요소에 대해 주어진 명령 블록을 실행하고 그 결과를 새로운 배열로 반환합니다. 각 요소에 연산이 적용된 후 배열의 상태를 확인할 수 있습니다.
PML1 방식 예시:
!array = OBJECT ARRAY() !array.APPEND(1) !array.APPEND(2) !block = OBJECT BLOCK('!array[!EvalIndex] + 1') !newArray = !array.EVALUATE(!block) Q VAR !newArray
결과:
Q VAR !newArray <array>1 : 2 <array>2 : 3
PML2 방식 예시:
!array = OBJECT ARRAY() !array[1] = 1 !array[2] = 2 !block = OBJECT BLOCK('!array[!EvalIndex] + 1') !newArray = !array.EVALUATE(!block) Q VAR !newArray
결과:
Q VAR !newArray <array>1 : 2 <array>2 : 3
3.15 REMOVE(REAL index)
설명: Remove 메서드는 배열에서 특정 인덱스의 요소를 제거하고, 배열의 나머지 요소를 재정렬합니다. 제거된 요소와 배열의 상태를 확인할 수 있습니다.
PML1 방식 예시:
!array = OBJECT ARRAY() !array.APPEND('apple') !array.APPEND('banana') !array.APPEND('cherry') !removed = !array.REMOVE(2) Q VAR !array Q VAR !removed
결과:
Q VAR !array <array>1 : 'apple' <array>2 : 'cherry' Q VAR !removed 'banana'
PML2 방식 예시:
!array = OBJECT ARRAY() !array[1] = 'apple' !array[2] = 'banana' !array[3] = 'cherry' !removed = !array.REMOVE(2) Q VAR !array Q VAR !removed
결과:
Q VAR !array <array>1 : 'apple' <array>2 : 'cherry' Q VAR !removed 'banana'
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 8 - Object Table()
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다 오류 있으면 댓글 달아주세요 추후 수정 예정입니다.** OBJECT TABLE은 PML에서 데이터의 집합을 표 형식으로 표현하는 데 사용되는 객체입니다. 이 TABLE은 특정 컬렉션(데이터베이스 참조의 Array)과 컬럼을 정의하는 COLUMN ARRAY로 구성됩니다. OBJECT TABLE과 OBJECT COLUMN을 사용하면 데이터의 조직화와 구조화를 쉽게 관리할 수 있습니다. 1. OBJECT TABLE의 구조 OBJECT TABLE은 기본적으로 두 가지 주요 요소로 구성됩니다: COLLECTION: TABLE에 포함될 데이터를 참조하는 dbref 타입의 Array입니다. 이 Array는 특정 조건에 맞는 데이터베이스 요소들을 수집하여 생성됩니다. COLUMN ARRAY: TABLE에 포함된 각 컬럼을 정의하는 OBJECT COLUMN들의 Array입니다. 각 COLUMN은 해당 컬럼에 대한 데이터를 표현하는 표현식과 추가적인 속성을 포함합니다. 구문: 2. OBJECT COLUMN의 정의 OBJECT COLUMN은 TABLE의 각 컬럼을 정의하는 객체로, 표현식, 정렬 가능 여부, 그룹화 가능 여부, 컬럼 제목 등의 속성을 포함합니다. EXPRESSION: 이 표현식은 각 컬럼의 데이터를 결정합니다. 예를 들어, 특정 dbref의 이름이나 타입을 추출하는 표현식을 사용할 수 있습니다. BOOLEAN (정렬 가능 여부): 이 컬럼이 정렬 가능한지 여부를 나타냅니다. BOOLEAN (그룹화 가능 여부): 이 컬럼이 그룹화 가능한지 여부를 나타냅니다. STRING (컬럼 제목): 이 컬럼의 제목을 나타내는 문자열입니다. 구문: 3. OBJECT TABLE 및 OBJECT COLUMN을 사용한 예제 아래는 OBJECT TABLE과 OBJECT COLUMN을 사용하는 예제입니다. 예제 1: 간단한 테이블 생성 이 예제에서는 'PIPE'라는 타입을 가진 모든 요소를 수집하고, 그 요소들의 SITE, ZONE, NAME을 각 컬럼에 표현하는 테이블을 생성합니다. 4. OBJECT TABLE 메서드 OBJECT TABLE에는 다양한 메서드가 존재하며, 이를 통해 테이블의 데이터에 접근하거나 조작할 수 있습니다. PrimaryKey()
Bito
Pml Basic 7 - Object FILE()
** GPTS로 학습시킨후 뽑아낸 글입니다 오류있으면 댓글 달아주세요 추후 수정 예정입니다.** OBJECT FILE의 개념과 사용 방법에 대한 자세한 설명 OBJECT FILE은 PML에서 FILE들을 다룰떄 사용합니다. 1. OBJECT FILE의 정의 OBJECT FILE은 파일 작업을 수행하기 위해 PML에서 제공하는 객체입니다. 이 객체를 사용하여 파일을 열고, 읽고, 쓰고, 닫는 작업을 할 수 있습니다. 파일 작업은 주로 보고서를 생성하거나, 데이터를 외부로 저장하거나, 외부 데이터를 시스템으로 가져올 때 사용됩니다. 구문: 이 구문을 통해 OBJECT Object File를 생성할 수 있습니다. 생성된 !Object File를 사용하여 파일 작업을 수행할 수 있습니다. 2. Object File의 생성 Object File를 생성하려면 다음과 같이 파일 경로를 지정하여 객체를 생성합니다. 구문: 이 구문을 통해 !MyFile이라는 Object File를 생성하여, 이후 파일 작업을 수행할 준비를 합니다. 3. 파일 열기 및 닫기 파일 작업을 수행하기 전에 파일을 열어야 하며, 작업이 끝난 후에는 파일을 닫아야 합니다. 파일 열기: Open() 메서드는 파일을 지정된 모드로 엽니다. 모드에는 'READ', 'WRITE', 'OVERWRITE', 'APPEND' 등이 있습니다. 파일 닫기: Close() 메서드는 열려 있는 파일을 닫습니다. 4. 파일에서 데이터 읽기
Bito
Pml Basic 6 - Object Collection()
** GPTS로 학습시킨후 뽑아낸 글입니다 어색만 부분이나 있을수 있습니다 오류 있으면 댓글 달아주세요 추후 수정 예정입니다.** Object Collection은 기존 PML1 방식보다 사용하기 번거롭습니다. 하지만 2개이상의 Search Scope를 설정 할 수 있다는 장점, Collect 되는 Data 타입이 String이 아닌 Dbref라는점에서 좀 더 효율적인 collect가 필요할떄 사용합니다. 1. OBJECT COLLECTION의 정의 OBJECT COLLECTION은 E3D에서 기본 제공되는 Object로 특정 범위(Scope), 타입(Type), 필터(Filter) 등을 설정하여 조건에 맞는 객체들을 수집합니다. 구문: 이 구문을 통해 Object Collection을 생성할 수 있습니다. 2. OBJECT COLLECTION의 주요 메서드 OBJECT COLLECTION은 데이터를 수집하고 필터링하기 위한 다양한 메서드를 제공합니다. 여기서는 자주 사용되는 메서드와 그 예제를 설명합니다. 2.1 SCOPE(STRING scope) SCOPE 메서드는 Object Collection이 데이터를 수집할 범위를 설정합니다. Scope는 WORLD(전체 모델), CE(현재 요소), 또는 특정 영역 등으로 설정할 수 있습니다. Scope를 설정하면 그 범위 내에서만 객체를 수집합니다. 예제: 이 예제에서는 전체 모델(WORLD) 범위에서 객체를 수집하도록 설정합니다. 2.2 ADDSCOPE(STRING scope) ADDSCOPE 메서드는 추가적인 범위를 설정하여 여러 범위에서 데이터를 수집할 수 있게 합니다. 이 메서드를 사용하면 초기 SCOPE에서 지정한 범위 외에 다른 범위도 추가로 포함시킬 수 있습니다. 예제: 이 예제에서는 /ZONE1이라는 특정 영역을 추가하여, 초기 SCOPE 외에도 이 영역에서 데이터를 수집하도록 설정합니다. 2.3 TYPE(STRING type)