SAP ABAP REPLACE 문자열 예제 정리

오늘은 ABAP 스트링 연산 중 REPLACE 사용법과 예제를 정리해 보았습니다.

REPLACE 구문은 특정 검색어를 지정한 문자열로 바꿔주는 명령어 구문입니다.

전반적인 사용법은 ABAP 문자열 FIND의 사용법과 유사합니다. 겹치는 키워드가 대부분일 정도로 사용법이 유사합니다.

FIND에 대한 내용은 아래의 링크에서 자세히 확인할 수 있습니다.

ABAP 스트링에서 FIND 구문 사용법

ABAP REPLACE 기본 구문

ABAP REPLACE 의 기본 구문은 다음과 같습니다.

DATA(str) = `안녕하세요`.
REPLACE `세요` IN str WITH `신가`

“세요”라는 단어를 찾어 “신가”로 바꾸어줍니다.

FIRST OCCURRENCE

가장 처음 만나게 되는 패턴만을 바꾸고자 하는 글자로 바꾸어 줍니다.

  DATA: LV_ORG1 TYPE STRING.

  LV_ORG1 = '자재코드  001 생성되었습니다. [ 001] 완료 '.

  REPLACE FIRST OCCURRENCE OF ' 001' IN LV_ORG1 WITH '2000000' .

  WRITE : / LV_ORG1.

처음 만난 ” 001″ 만 “2000000”로 대체되며 두번째 ” 001″은 변경되지 않습니다.

자재코드 2000000 생성되었습니다. [ 001] 완료

ALL OCCURRENCES OF

위의 예제 FIRST OCCURRENCE와 달리 ALL OCCURRENCES OF는 패턴과 일치하는 모든 글자를 대체 변경합니다.

DATA: LV_ORG2 TYPE STRING.

  LV_ORG2 = '자재코드  001 생성되었습니다. [ 001] 완료 '.

  REPLACE ALL OCCURRENCES OF ' 001' IN LV_ORG2 WITH '2000000' .

  WRITE : / LV_ORG2.
    

모든 001이 변경되며 결과는 아래와 같습니다.

자재코드 2000000 생성되었습니다. [2000000] 완료

IN TABLE /itab/

IN TABLE 구문을 통해, REPLACE 역시 FIND 와 마찬가지로 인터널 테이블 내에 텍스트를 일괄로 변경할 수 있습니다.

DATA : LT_TAB TYPE TABLE OF STRING.
DATA : LS_TAB TYPE STRING.

  APPEND '[ 001] 자재 생성' TO LT_TAB.
  APPEND '[ 002] 부터 사용가능' TO LT_TAB.

  REPLACE ALL OCCURRENCES OF ' 001'
    IN TABLE LT_TAB WITH '200000'.

  REPLACE ALL OCCURRENCES OF ' 002'
    IN TABLE LT_TAB WITH '2022.12.01'.

ALL OCCURRENCES OF 키워드와 함께, 인터널 테이블의 모든 내역을 찾아서 해당 내역을 대체 변경해 줍니다.

RESULTS

바뀐 라인, 인덱스 정보를 라인 아이템 스트럭처 혹은 인터널 테이블 형태로 담게 됩니다.

CLEAR : LT_TAB, LT_TAB[].
APPEND '[ 001] 자재 생성' TO LT_TAB.
APPEND '[ 002] 생성' TO LT_TAB.
APPEND '[ 002] 부터 사용가능' TO LT_TAB.

REPLACE ALL OCCURRENCES OF ' 002'
    IN TABLE LT_TAB WITH '2022.12.01' RESULTS DATA(LT_RESULTS).

RESULTS result_tab|result_wa] 의 형태로, 결과가 한개 일 떄에는 WA 단일 워크에어리어 구조에, 결과가 여러개 일 때에는 인터널 테이블 형태로 결과를 가져오게 됩니다.

ABAP REPLACE 문자열 RESULTS

REGEX 정규식

REGEX 키워드를 통해 정규식을 사용할 수 있습니다.

  DATA ITAB TYPE TABLE OF STRING.

  DATA: LV_ORG5 TYPE STRING.
  DATA : LV_SEARCH TYPE STRING.

  LV_ORG5 = 'This is an example string for example.'.
  LV_SEARCH = 'This|example'.

  REPLACE ALL OCCURRENCES OF REGEX LV_SEARCH
    IN LV_ORG5 WITH '###'.  

this 와 example 두개의 글자를 찾아서 ### 로 변경을 합니다.

### is an ### string for ###

IGNORING CASE

IGNORING CASE 구문을 사용하면 패턴을 대소문자 구문없이 찾게 됩니다.

DATA: LV_ORG6 TYPE STRING.

  LV_ORG6 = 'This is an example string for Example.'.
  LV_SEARCH = 'example'.

  REPLACE ALL OCCURRENCES OF REGEX LV_SEARCH
    IN LV_ORG6 WITH '###'
    IGNORING CASE.

마지막 Example 은 대문자로 시작하지만 IGNORING CASE 키워드를 사용했기 때문에 Search 키워드로 대체 변경되게 됩니다.

### is an ### string for ###

SY-SUBRC 판정

하나라도(하나 이상) REPLACE 대체 처리가 발생했다면 SY-SUBRC 는 0으로, 하나도 없었다면 SY-SUBRC 는 4로 리턴됩니다.

예외 처리

REPLACE에서 처리되는 예외는 다음과 같습니다.

  • CX_SY_REPLACE_INFINITE_LOOP : 길이가 0인 문자열로 검색을 시도할 때 무한 루프 발생
  • CX_SY_TAB_RANGE_OUT_OF_BOUNDS : 시작 인덱스(오프셋)을 잘 못 지정
  • CX_SY_INVALID_REGEX : 잘못된 표현의 정규식

이상으로 ABAP에서 문자열 REPLACE 연산에 대해서 알아보았습니다.

위의 내용을 간단히 요약하면 다음과 같습니다.

  • FIRST OCCURRENCE 구문으로 처음 만난 패턴만 대체 변경할 수 있습니다.
  • ALL OCCURRENCES OF 구문으로 패턴과 일치하는 모든 문자열을 대체 변경 할 수 있습니다.
  • IN TABLE 구문으로 인터널 테이블 내에 패턴 문자열을 일괄로 변경할 수 있습니다.
  • IGNORING CASE 구문으로 대소문자 구분 없이 대체 변경 처리할 수 있습니다.

좀 더 세부적인 SAP 의 공식문서 ABAP REPLCE 링크에서 확인할 수 있습니다.

함께 보면 좋은 글

SAP ABAP 연산자 Operator – 산술/비교/스트링

SAP ABAP SY 시스템 변수 정리, SY-SUBRC 등

SAP Predefined ABAP Type 고정 길이 자주 쓰는 형 정리