ABAP 프로그램을 개발하는 과정에서 다양한 형태로 문자열을 처리하게 됩니다.
문자열을 분리하기도 하고, 문자열을 합치기도 하고, 문자열의 문자를 이동하기도 합니다. 또는 공백을 제거하거나 문자열을 치환하거나 대,소문자를 변환하기도 합니다.
이번 글에서는 ABAP에서 문자열을 처리하는 다양한 키워드(Keyword) 정리 및 사용 방법 설명을 해 보겠습니다.
문자열의 길이 구하기 – STRLEN
▶ STRLEN(<string>)
– <string>의 문자열 길이를 반환해 줍니다.
ex) DATA: string VALUE ‘gseek’.
i = STRLEN(string).
결과 => 5
문자열 연결하기 – CONCATENATE
▶ CONCATENATE F1 F2 F3 INTO G.
– F1, F2, F3 문자열을 합쳐서 G에 넣습니다.
– SEPARATED BY <string>
FI, F2, F3사이에 <string> 구분자를 넣습니다.
ex) DATA: FIRST(5) VALUE ‘gseek’,
SECOND(2) VALUE ‘pe’,
THIRD(2) VALUE ‘kr’,
NAME(20).
CONCATENATE FIRST SECOND THIRD INTO NAME SEPARATED BY SPACE.
결과 => ‘gseek pe kr’
문자열 나누기 – SPLIT
▶ SPLIT G AT <string> INTO F1 F2 F3.
– G의 내용을 <string>으로 구분하여 F1, F2, F3에 나누어 넣습니다.
ex) DATA: NAME(20) VALUE ‘,gseek,pe,kr’,
FIRST(3),
SECOND(5),
THIRD(2),
FORTH(2),
FIFTH(2).
SPLIT NAME AT ‘,’ INTO FIRST SECOND THIRD FORTH FIFTH.
결과 => FIRST = SPACE
SECOND = ‘gseek’
THIRD = ‘pe’
FORTH = ‘kr’
FIFTH = SPACE
문자열 이동 – SHIFT
– 변수에 들어있는 값을 이동합니다. 모든 field를 type C로 간주하여 처리하기 때문에 type C, N, D 외에는 사용할 때 주의하여야 합니다.
– Option : CIRCULAR – 잘려나간 문자를 맨 뒤에 놓습니다.
RIGHT – 오른쪽으로 1칸 이동합니다.
– 좌측으로 1칸 이동합니다.
– SHIFT 문은 PERFORMANCE를 많이 요구하기 때문에 LOOP안에서는 사용을 하지 않는 것이 좋습니다.(1개의 문자를 이동하는데 5Microseconds 소요)
- SHIFT c.
ex) DATA: FIRST(10) VALUE ‘ABCEDFGHIJ’.
SHIFT FIRST.
결과 : FIRST = ‘BCDEFGHIJ ‘. - SHIFT c BY n PLACES.
– 변수 c를 자리만큼 좌측으로 이동합니다. 만일 c의 length보다 n이 크면 c에는 blank가 들어가게 됩니다. - SHIFT c UP TO c1.
– 변수 c의 내부에 c1이라는 string을 만날 때까지 좌측으로 이동합니다.
– c1이 없으면 아무 변화도 일어나지 않습니다. 이때 return value SY-SUBRC는 -4가 됩니다. - SHIFT c LEFT DELETING LEADING c1.
SHIFT c RIGHT DELETING TRAILING c1.
– string c의 첫 번째 혹은 마지막 character가 string c1에 포함되어 있다면 해당 character를 삭제하면서 이동합니다.
– 첫 번째 혹은 마지막 character가 중복되어 있다면 다른 character가 나올 때까지 이동합니다.
– 같은 글자가 없다면 아무런 변화도 일어나지 않습니다.
공백 없애기 – CONDENSE
▶ CONDENSE <string>.
– string 내부 단어 사이의 blank를 1개씩만 남기고 없앱니다.
– Option : NO-GAPS – 모든 blank를 없앱니다. (CONDENSE <string> NO-GAPS.)
– type C를 제외한 다른 field를 포함한 field string을 변환 시키지 않는 것이 좋습니다. 이상한 값이 들어갈 수 있습니다.
대소문자 변환 – TRANSLATE
▶ TRANSLATE c TO UPPER CASE. “대문자로
▶ TRANSLATE c TO LOWER CASE. “소문자로
– 대소문자를 변환하는데 사용합니다.
– 10byte이상의 긴 field를 변환하는 것은 performance에 좋지 않습니다.
공백 글자 치환 – OVERLAY
OVERLAY c1 WITH c2.
– c1의 character 중 blank의 자리에 c2의 character가 있다면 blank의 위치에 있는 c2의 character를 넣습니다.
– Performance에 좋지 않기 때문에 많이 쓰지 않는 것이 좋습니다.
ex) DATA: CHAR1(20) VALUE ‘gs k. .kr’,
CHAR2(20) VALUE ‘ ee pe aa’.
OVERLAY CHAR1 WITH CHAR2.
결과 => WORK = ‘gseek.pe.kr’.
문자열 치환 – REPLACE
▶ REPLACE c1 WITH c2 INTO c3.
– string c3에 있는 c1이라는 string을 c2로 변환 시킵니다.
ex) STR3 = ‘ABCDEFG’.
STR1 = ‘BCD’.
STR2 = ‘XYZ’.
REPLACE STR1 WITH STR2 INTO STR3.
결과 => ABCDEFG -> AXYZEFG
– 원하는 길이만큼 치환
LEN = 2
REPLACE STR1 WITH STR2 INTO STR3 LENGTH LEN.
결과 => ABCDEFG -> AXYZDEFG
문자열 찾기 – SEARCH
▶ SEARCH c1 FOR c2.
– c1에서 c2라는 string을 찾습니다.
– c1의 단어 사이는 blank로 구분합니다.
– c2에는 ‘_’ , ‘*’를 포함하여 사용할 수 있습니다.
– SY-SUBRC = 0 일 때 SY-EDPOS에 찾은 단어의 위치 정보가 들어 있습니다.
▶ SEARCH itab FOR c2.
– itab이라는 internal table에서 c2라는 string을 찾습니다.
– 나머지는 위와 상동
– SY-SYBRC = 0 일 때 SY-TABIX에는 internal table의 line number가 들어 있고, SY-EDPOS에는 위치 정보가 들어 있습니다.
결론
SAP ABAP에서 문자열을 처리하는 다양한 키워드(Keyword)를 제공하고 있습니다. 적절한 키워들 사용하면 훨씬 효과적인 ABAP 프로그램 개발이 가능해 집니다.
문자열 처리와 관련하여 키워드 뿐만 아니라 다양한 함수(Function Module)도 제공하고 있으므로 참고해서 사용하시면 됩니다.
※ 함께 읽으면 도움이 될 만한 다른 포스팅 글입니다.
이 글이 도움이 되었기를 바랍니다. ^-^