본문 바로가기
ABAP/Syntax

[Syntax] String Expressions & Functions

by name_text 2023. 11. 9.

String Expressions & Functions

 

ABAP new syntax에서는 문자열 처리를 위해 in-line으로 사용할 수 있는 다양한 기능을 제공하고 있습니다.

아래 예시 최근에 사용한 String Expression의 format option과 function입니다.

이외에도 무수히 많은 기능이 있으니 도움말을 참고하면 됩니다.

 

String format_options

https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abapcompute_string_format_options.htm

Syntax

... [WIDTH     = len]
    [ALIGN     = LEFT|RIGHT|CENTER|(dobj)|expr]
    [PAD       = c]
    [CASE      = RAW|UPPER|LOWER|(dobj)|expr]
    [SIGN      = LEFT|LEFTPLUS|LEFTSPACE|RIGHT|RIGHTPLUS|RIGHTSPACE|(dobj)|expr]
    [EXPONENT  = exp]
    [DECIMALS  = dec]
    [ZERO      = YES|NO|(dobj)|expr]
    [XSD       = YES|NO|(dobj)|expr]
    [STYLE     =  SIMPLE|SIGN_AS_POSTFIX|SCALE_PRESERVING
                 |SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO
                 |SCALE_PRESERVING_SCIENTIFIC|ENGINEERING
                 |(dobj)|expr]
    [CURRENCY  = cur]
    [NUMBER    = RAW|USER|ENVIRONMENT|(dobj)|expr]
    [ALPHA     = IN|OUT|RAW|(dobj)|expr]
    [DATE      = RAW|ISO|USER|ENVIRONMENT|(dobj)|expr]
    [TIME      = RAW|ISO|USER|ENVIRONMENT|(dobj)|expr]
    [TIMESTAMP = SPACE|ISO|USER|ENVIRONMENT|(dobj)|expr]
    [TIMEZONE  = tz]
    [COUNTRY   = cty] ...

 

 

String Processing Functions

https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/index.htm?file=abenprocess_functions.htm

 

 

# 사용 예시

DATA: LV_DEC TYPE P LENGTH 8 DECIMALS 2 VALUE -10000,
      LV_URL TYPE STRING VALUE `https://www.naver.com/?q=한글`,
      LV_STR TYPE STRING VALUE `Mat 자재 3.5", 10Kg`,
      LV_KUN TYPE KNA1-KUNNR VALUE '0000000010',
      LV_TIMESTAMP TYPE TIMESTAMPL.
GET TIME STAMP FIELD LV_TIMESTAMP.


*String format_options
*... [WIDTH     = len]
*    [ALIGN     = LEFT|RIGHT|CENTER|(dobj)|expr]
*    [PAD       = c]
*    [CASE      = RAW|UPPER|LOWER|(dobj)|expr]
*    [SIGN      = LEFT|LEFTPLUS|LEFTSPACE|RIGHT|RIGHTPLUS|RIGHTSPACE|(dobj)|expr]
*    [EXPONENT  = exp]
*    [DECIMALS  = dec]
*    [ZERO      = YES|NO|(dobj)|expr]
*    [XSD       = YES|NO|(dobj)|expr]
*    [STYLE     =  SIMPLE|SIGN_AS_POSTFIX|SCALE_PRESERVING
*                 |SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO
*                 |SCALE_PRESERVING_SCIENTIFIC|ENGINEERING
*                 |(dobj)|expr]
*    [CURRENCY  = cur]
*    [NUMBER    = RAW|USER|ENVIRONMENT|(dobj)|expr]
*    [ALPHA     = IN|OUT|RAW|(dobj)|expr]
*    [DATE      = RAW|ISO|USER|ENVIRONMENT|(dobj)|expr]
*    [TIME      = RAW|ISO|USER|ENVIRONMENT|(dobj)|expr]
*    [TIMESTAMP = SPACE|ISO|USER|ENVIRONMENT|(dobj)|expr]
*    [TIMEZONE  = tz]
*    [COUNTRY   = cty] ...

" 마이너스 부호를 앞으로 이동
WRITE:/ |{ LV_DEC SIGN = LEFT }|.

" 숫자를 사용자 UI형식으로
WRITE:/ |{ LV_DEC NUMBER = USER }|.

" 숫자에 통화키 설정
WRITE:/ |{ LV_DEC CURRENCY = 'KRW' }|.

" 숫자에 통화키 설정 및 사용자 UI형식으로
WRITE:/ |{ LV_DEC CURRENCY = 'KRW' NUMBER = USER }|.

" 대문자 변환
WRITE:/ |{ LV_STR CASE = UPPER }|.

" 소문자 변환
WRITE:/ |{ LV_STR CASE = LOWER }|.

" Conversion Alpha OUTPUT
WRITE:/ |{ LV_KUN ALPHA = OUT }|.

" 날짜 표시 형식
WRITE:/ |{ SY-DATUM DATE = ISO }|.
WRITE:/ |{ SY-DATUM DATE = ENVIRONMENT }|.
WRITE:/ |{ SY-DATUM DATE = USER }|.

" 시간 표시 형식
WRITE:/ |{ SY-UZEIT TIME = ISO }|.
WRITE:/ |{ SY-UZEIT TIME = ENVIRONMENT }|.
WRITE:/ |{ SY-UZEIT TIME = USER }|.

" TIMESTAMP 표시 형식
WRITE:/ |{ LV_TIMESTAMP TIMESTAMP = ISO }|.
WRITE:/ |{ LV_TIMESTAMP TIMESTAMP = ENVIRONMENT }|.
WRITE:/ |{ LV_TIMESTAMP TIMESTAMP = USER }|.



*String Functions
*cmax, cmin - character-like extreme value functions
*condense - condense function
*concat_lines_of - concatenation function
*escape - escape function
*insert - insert function
*match - match function
*repeat - repeat function
*replace - replace function
*reverse - reverse function
*segment - segment function
*shift_left, shift_right - shift functions
*substring, substring_... - substring functions
*to_upper, to_lower, to_mixed, from_mixed - case functions
*translate - translate function

"Condense
WRITE:/ CONDENSE( `   text   ` ).

"Replace
WRITE:/ REPLACE( VAL = |{ LV_TIMESTAMP TIMESTAMP = ISO }| REGEX = '[^[:alnum:]]'  WITH = SPACE  OCC = 0 ).

"Shift_left
WRITE:/ SHIFT_LEFT( VAL = LV_STR PLACES = 3 ).

"to_upper
WRITE:/ TO_UPPER( LV_STR ).

"to_lower
WRITE:/ TO_LOWER( LV_STR ).

"URL Encoding
WRITE:/ ESCAPE( VAL = LV_URL FORMAT = CL_ABAP_FORMAT=>E_URL ).

"Escape Json String
WRITE:/ ESCAPE( VAL = LV_STR FORMAT = CL_ABAP_FORMAT=>E_JSON_STRING ).



* String format과 function을 여러가질 조합하여 사용할 수 있다.

" replace와 shift_left 조합
WRITE:/ SHIFT_LEFT( VAL = REPLACE( VAL = |{ LV_TIMESTAMP TIMESTAMP = ISO }| REGEX = '[^[:alnum:]]'  WITH = SPACE  OCC = 0 ) PLACES = 2 ).

" condense와 alpha 조합
WRITE:/ CONDENSE( |{ LV_KUN ALPHA = OUT }| ).

'ABAP > Syntax' 카테고리의 다른 글

[Syntax] NEW - Instance Operator  (0) 2023.10.19
[Syntax] FOR - 반복 표현식  (1) 2023.10.17
[Syntax] LOOP AT itab - GROUP BY  (0) 2023.10.16
[OpenSQL] WITH - CTE 서브쿼리  (0) 2023.07.21
[Syntax] FILTER - Internal table 데이터 필터링  (0) 2023.07.20

댓글