목록으로

Object String()

Pml Basic 2

OBJECT STRING,, 모든 문자는 String 이라고 보면 됩니다.

이제 .(dot)을 이용하여 각 Function들을 사용하시면 됩니다

예시

!text = |ABCDEFG|
!result = !text.Match(|BC|)
q var !result

결과

<REAL> 2

예시

!text = |ABCDEFG|
!result = !text.Matchwild(|*BC*|)
q var !result

결과

<BOOLEAN> TRUE

예시

!text = |ABCDEFG|
!result = !text.Substring(2, 4)
q var !result

결과

<STRING> 'BCDE'
!text = |ABCDEFG|
!result = !text.lowcase()
q var !result

결과

<STRING> 'abcdefg'
OBJECT STRING,, 모든 문자는 String 이라고 보면 됩니다.
이제 .(dot)을 이용하여 각 Function들을 사용하시면 됩니다
예시
```
!text = |ABCDEFG|
!result = !text.Match(|BC|)
q var !result
```
결과:
```
<REAL> 2
```
예시
```
!text = |ABCDEFG|
!result = !text.Matchwild(|*BC*|)
q var !result
```
결과
```
<BOOLEAN> TRUE
```
예시
```
!text = |ABCDEFG|
!result = !text.Substring(2, 4)
q var !result
```
결과
```
<STRING> 'BCDE'
```
예시:
```
!text = |ABCDEFG|
!result = !text.lowcase()
q var !result
```
결과
```
<STRING> 'abcdefg'
```

Function 모음 대부분 STRING RETURN 입니다

## Match(STRING) OR MAT(STRING)
기능: 문자열의 시작 위치를 찾습니다.
예시:
```
VAR !ORI ORI
Q VAR !ORI.MATCH(|and|)
```
결과:
```
<REAL> 13
```
설명:
VAR 을 사용하여 !ORI 라는 변수에 ORI값을 STRING으로 받습니다
그렇기에 예를들어  'Y is W 45 S and Z is U' 요런 값이 들어갑니다
요기서 and를 찾고 and의 첫번째인 a가 13번째 값이므로 13을 반환합니다.
없으면 0을 반환하겠죠
string 메쏘드에 FIND() , MID() 이런 메쏘드 존재하지 않습니다

응용예시 1:
```
VAR !A ORI
!index = !A.match('and')
!resultY = !A.Substring(1, !index - 1).trim()
!resultZ = !A.Substring(!index + 3, !A.Length()).trim()
Q VAR !A
Q VAR !resultY
Q VAR !resultZ
```

응용결과 1:
```
<STRING> 'Y is W 45 S and Z is U'
<STRING> 'Y is W 45 S'
<STRING> 'Z is U'
```
응용설명 1:
var 로 변수를 선언하였기에 object ori가 아닌 string ori 값이 들어가게 됩니다.
응용예시 2:
```
!A = ORI
!resultY = !A.YDIR().STRING()
!resultZ = !A.ZDIR().STRING()
!indexY = !resultY.match('WRT')
!indexZ = !resultZ.match('WRT')
Q VAR !resultY
!resultY = !resultY.Substring(1, !indexY - 1).trim()
!resultZ = !resultZ.Substring(1, !indexZ - 1).trim()
Q VAR !A
Q VAR !resultY
Q VAR !resultZ
```
응용결과 2:
```
<ORIENTATION> Y is W 45 S WRT /ZONE-EQUIPMENT-AREA02-WORKSHOP and Z is U WRT /ZONE-EQUIPMENT-AREA02-WORKSHOP
   ALPHA <REAL> 0
   BETA <REAL> 0
   GAMMA <REAL> 135
   ORIGIN <DBREF> =2013286706/2

<STRING> 'W 45 S'

<STRING> 'U'
```
응용설명 2:
PML2 방식을 사용했기에 !A 는 ORI 값이 들어갑니다.
즉 STRING 값이 아닌 OBJECT ORI 값이 들어갑니다.
XDIR() YDIR() ZDIR() 이라는 메쏘드가 있어서
해당 메쏘드를 이용하여 Y값 Z값을 구해줍니다.

!A.YDIR().STRING() 하면 <STRING> 'W 45 S WRT /ZONE-EQUIPMENT-AREA02-WORKSHOP'
요런식으로 값이 들어갑니다 그렇기에 WRT 이전값만 받으면 됩니다.

응용예시 3:
```
!A = |Y is W 45 S and Z is U|
!result = ||
IF (!A.MATCH(|and|) GT 0) THEN
    !result = 'and true'
ELSE
    !result = 'and false'
ENDIF
q var !result
```
응용결과 3:
```
<STRING> 'and true'
```
응용설명 3:
MATCH()를 사용하여 문자열 내 "and"의 존재 여부를 확인.
MATCH('and')는 "and"의 위치(1 이상의 값)를 반환하며, GT 0 조건을 통해 포함 여부를 판별.
조건이 참이면 !result에 'and true' 저장, 거짓이면 'and false' 저장.
최종적으로 Q VAR을 사용하여 !result 값을 출력.

## MatchWild(STRING) OR MATCHW(STRING)
기능: 와일드카드( * 는 여러 문자, ? 는 한 문자)를 사용하여 문자열을 비교합니다. (RETURN 값 TRUE OR FALSE)
응용예시 1: 특정 단어 포함 여부 확인
```
!A = |Pipe is connected to Valve and Pump|
!result = ||

IF (!A.MATCHWILD(|*Valve*|)) THEN
    !result = 'Valve Found'
ELSE
    !result = 'Valve Not Found'
ENDIF

Q VAR !result
```
응용결과 1:
```
<STRING> 'Valve Found'
```
응용설명 1:
MATCHWILD('|*Valve*|')를 사용하여 "Valve"가 포함되었는지 확인.
*는 여러 문자를 의미하여 "Valve" 앞뒤에 어떤 문자가 와도 찾을 수 있음.
TRUE면 'Valve Found', FALSE면 'Valve Not Found' 저장 후 출력.

응용예시 2: 특정 패턴 검사 (Document Code Validation)
```
!A = |DOC-12345-REV1|
!result = ||

IF (!A.MATCHWILD(|DOC-?????-REV?|)) THEN
    !result = 'Valid Document Code'
ELSE
    !result = 'Invalid Document Code'
ENDIF

Q VAR !result
```
응용결과 2:
```
<STRING> 'Valid Document Code'
```
응용설명2 :
MATCHWILD('|DOC-?????-REV?|')를 사용하여 특정 패턴을 확인.
?는 한 문자를 의미하므로 "DOC-" 뒤 5자리, "-REV" 뒤 1자리 숫자가 포함된 패턴을 찾음.
일치하면 'Valid Document Code', 아니면 'Invalid Document Code' 저장 후 출력.

응용예시 3: 여러 개의 키워드 검사
```
!A = |The pipeline is leaking near Pump-101|
!result = ||

IF (!A.MATCHWILD(|*Pump*|) OR !A.MATCHWILD(|*Valve*|)) THEN
    !result = 'Pump or Valve Found'
ELSE
    !result = 'No Pump or Valve'
ENDIF

Q VAR !result
```
응용결과 3:
```
<STRING> 'Pump or Valve Found'
```
응용설명 3:
MATCHWILD('|*Pump*|')와 MATCHWILD('|*Valve*|')를 사용하여 "Pump" 또는 "Valve"가 포함된 문장을 확인.
*를 사용하여 문자열 내 어느 위치든 검색 가능하도록 설정.
OR 연산자로 두 조건 중 하나라도 만족하면 'Pump or Valve Found'를 출력.

## EQNoCase(STRING)
기능:
대소문자 구분 없이 문자열을 비교합니다. (RETURN 값: TRUE 또는 FALSE)

응용예시:
```
!A = |System Check|
!B = |system check|
!result = !A.EQNoCase(!B)

Q VAR !result
```
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
EQNoCase()는 대소문자를 구분하지 않고 문자열을 비교.
"System Check"와 "system check"는 대소문자 차이만 있으므로 TRUE 반환.

## After(STRING)
기능:
문자열에서 가장 왼쪽에 있는 STRING 다음에 오는 부분 문자열을 반환합니다.

응용예시:
```
!A = |Module A: System Active|
!result = !A.After(|: |)

Q VAR !result
```
응용결과:
```
<STRING> 'System Active'
```
응용설명:
After('|: |')를 사용하여 ": " 이후의 문자열을 반환.
"Module A: System Active"에서 ": " 이후 "System Active"만 남음.
## Before(STRING)
기능:
문자열에서 가장 왼쪽에 있는 STRING 앞에 있는 부분 문자열을 반환합니다.

응용예시:
```
!A = |User: Admin|
!result = !A.Before(|: |)

Q VAR !result
```
응용결과:
```
<STRING> 'User'
```
응용설명:
Before('|: |')를 사용하여 ": " 앞의 문자열을 반환.
"User: Admin"에서 "User"만 남음.
## Length()
기능:
문자열의 문자 수를 반환합니다.

응용예시:
```
!A = |Hello World|
!length = !A.Length()

Q VAR !length
```
응용결과:
```
<REAL> 11
```
응용설명:
Length()를 사용하여 "Hello World"의 문자 개수를 반환.
공백도 포함하여 11을 반환.
## UpCase()
기능:
문자열을 대문자로 변환합니다.

응용예시:
```
!A = |error detected|
!result = !A.UpCase()

Q VAR !result
```
응용결과:
```
<STRING> 'ERROR DETECTED'
```
응용설명:
UpCase()를 사용하여 모든 문자를 대문자로 변환.
"error detected" → "ERROR DETECTED".
## LowCase()
기능:
문자열을 소문자로 변환합니다.

응용예시:
```
!A = |WARNING MODE|
!result = !A.LowCase()

Q VAR !result
```
응용결과:
```
<STRING> 'warning mode'
```
응용설명:
LowCase()를 사용하여 모든 문자를 소문자로 변환.
"WARNING MODE" → "warning mode".
## Replace(STRING1, STRING2)
기능:
문자열에서 모든 STRING1을 STRING2로 바꿉니다.

응용예시:
```
!A = |Temperature: 25C|
!result = !A.Replace(|25C|, |25°C|)

Q VAR !result
```
응용결과:
```
<STRING> 'Temperature: 25°C'
```
응용설명:
Replace('|25C|', '|25°C|')를 사용하여 "25C"를 "25°C"로 변경.
"Temperature: 25C" → "Temperature: 25°C".

## Part(REAL)
기능:
문자열에서 공백 또는 탭을 구분자로 사용하여 n번째 단어를 추출합니다.

응용예시:
```
!A = |Pipe Valve Pump Compressor|
!result = !A.Part(2)

Q VAR !result
```
응용결과:
```
<STRING> 'Valve'
```
응용설명:
Part(2)는 두 번째 단어 "Valve"를 반환.
공백 또는 탭만 구분자로 사용 가능하며, 쉼표(,) 같은 다른 구분자는 불가능!
인덱스는 1부터 시작.



## Split(STRING)
기능:
주어진 STRING을 구분자로 사용하여 배열로 나눕니다.

응용예시:
```
!A = |Pipe,Valve,Pump,Compressor|
!result = !A.Split(|,|)

Q VAR !result[2]
```
응용결과:
```
<STRING> 'Valve'
```
응용설명:
Split('|,|')를 사용하여 쉼표(,)를 기준으로 문자열을 나눔.
!result[2]는 "Valve" 반환.
반환값은 배열이며, 개별 요소를 참조하려면 인덱스를 사용해야 함!
공백이나 탭이 아닌 특정 구분자로 문자열을 나눌 때 사용!

## Substring(REAL1, REAL2)
기능:
REAL1 위치에서 REAL2 길이만큼 문자열을 반환합니다.
PML에는 min() 같은 함수가 없으므로, 부분 문자열을 가져올 때 Substring()을 반드시 사용해야 함!

응용예시:
```
!A = |Equipment-12345|
!result = !A.Substring(11, 5)

Q VAR !result
```
응용결과:
```
<STRING> '12345'
```
응용설명:
Substring(11, 5)는 11번째 문자부터 5글자 반환.
"Equipment-12345"에서 "12345"만 추출됨.
min(), max() 같은 함수가 없으므로 Substring()을 사용하여 부분 문자열을 가져와야 함!

## Trim()
기능:
문자열의 앞뒤 공백을 제거합니다.

응용예시:
```
!A = |   Data Process   |
!result = !A.Trim()

Q VAR !result
```
응용결과:
```
<STRING> 'Data Process'
```
응용설명:
Trim()을 사용하면 " Data Process " → "Data Process"로 변환.
앞뒤 공백만 제거하고, 중간 공백은 유지됨!
## LT(STRING)
기능:
두 문자열을 ASCII 순서로 비교합니다.
(RETURN 값: TRUE 또는 FALSE)

응용예시:
```
!A = |Alpha|
!B = |Beta|
!result = !A.LT(!B)

Q VAR !result
```
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
"Alpha"는 "Beta"보다 ASCII 순서상 앞에 있으므로 TRUE 반환.
대소문자도 ASCII 값 기준으로 비교되므로, "a"와 "A"의 순서도 다를 수 있음!
## Digits()
기능:
문자열이 10진수로 구성되어있으면 해당 숫자를 반환, 없으면 -1을 반환합니다.

응용예시:
```
!A = |Order 98765|
!result = !A.Digits()

Q VAR !result
```
응용결과:
```
<REAL> -1
```
응용설명:
10진수만 있으면 10진수 반환 
문자도 있으면 -1 반환!
## isDigits()
기능:
문자열이 숫자로만 이루어져 있는지 확인합니다.
(RETURN 값: TRUE 또는 FALSE)

응용예시:
```
!A = |12345|
!result = !A.isDigits()

Q VAR !result
```
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
"12345"는 숫자로만 이루어져 있으므로 TRUE 반환.
"A123" 같은 문자열이면 FALSE 반환.
## isLetters()
기능:
문자열이 문자로만 이루어져 있는지 확인합니다.
(RETURN 값: TRUE 또는 FALSE)

응용예시:
```
!A = |Engine|
!result = !A.isLetters()

Q VAR !result
```
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
"Engine"은 문자로만 이루어져 있으므로 TRUE 반환.
"Engine123"처럼 숫자가 포함되면 FALSE.
## isLettersAndDigits()
기능:
문자열이 문자와 숫자로만 이루어져 있는지 확인합니다.
(RETURN 값: TRUE 또는 FALSE)

응용예시:
```
!A = |ModelX100|
!result = !A.isLettersAndDigits()

Q VAR !result
```
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
"ModelX100"은 문자 + 숫자로만 구성되어 있으므로 TRUE 반환.
"Model-X100"처럼 특수문자가 포함되면 FALSE.
## Occurs(STRING)
기능:
주어진 STRING이 몇 번 등장하는지 반환합니다.

응용예시:
```
!A = |Valve, Pump, Valve, Pipe|
!result = !A.Occurs(|Valve|)

Q VAR !result
```
응용결과:
```
<REAL> 2
```
응용설명:
"Valve"가 2번 등장했으므로 2 반환.
대소문자를 구분하므로 "valve"는 다른 단어로 인식됨!
## Empty()
기능:
문자열이 비어 있으면 TRUE 반환, 비어 있지 않으면 FALSE 반환.

응용예시:
```
!A = ||
!result = !A.Empty()

Q VAR !result
응용결과:
```
<BOOLEAN> TRUE
```
응용설명:
Empty()는 문자열이 완전히 비어 있을 때만 TRUE 반환.
" "처럼 공백이 있으면 FALSE.

## String(임의의 값)
임의의 값을 STRING으로 변환해서 변수에 할당합니다.
## Dbref()
문자열을 DBREF로 변환합니다.
## Position()
문자열을 Position 으로 변환합니다.
## REAL()
문자열을 실수(숫자)로 변환합니다.
## Block()
문자열을 블록으로 변환합니다.
## Boolean()
문자열을 Boolean으로 변환합니다.
## Bore()
문자열을 bore로 변환합니다.
## Direction()
문자열을 Direction으로 변환합니다.