ABAP 문자열 처리 정리: string과 c, 문자열 템플릿, SPLIT, 부분 문자열
3줄 요약
string은 길이가 변하는 문자열(끝 공백 보존),c는 고정 길이 텍스트 필드예요. 길이를 제한할 이유가 없으면string을 권해요.문자열 조립은
|...{ 식 }...|문자열 템플릿이 편하지만, 문자만 있는 템플릿은 실행 중에 식으로 계산되므로 고정 문자열에는 백틱 리터럴을 써요.자르기, 합치기, 바꾸기는
SPLIT,condense( ),substring( ),find( ),replace( )같은 문장과 내장 함수로 해요.
어떤 상황에서 쓰나요
인터페이스 파일의 한 줄을 분해하거나, 메시지에 숫자와 날짜를 넣어 예쁘게 출력하거나, 공백이 이상하게 붙은 코드값을 정리하는 일은 거의 모든 프로젝트에서 나와요. 연재 3회는 치트시트의 *String Processing* 편을 용도별로 줄였어요.
핵심 내용
`string` 과 `c`
string은 가변 길이이고 초기값이 빈 문자열이며, 모든 연산에서 끝 공백이 보존돼요. 이론상 2GB까지 쓸 수 있어요.c는 길이를 선언 때 정하는 고정 길이이고, 초기값은 공백이에요. 최대 262143자이고, 대부분의 연산 위치에서 끝 공백이 잘려요.국가 코드처럼 최대 길이가 정해진 값이나 길이가 제한된 폼 입력에는
c가 어울리고, 그렇지 않으면string이 유연하다고 해요. 대신string의 부분 문자열에 접근할 때는 문자열이 충분히 긴지 직접 확인해야 해요.
문자열 템플릿 (`|...|`)
중괄호 안에 변수, 함수 호출, 내장 함수를 넣을 수 있어요(
|User: { sy-uname }, 길이 { strlen( s ) }|). 문자열로 변환 가능해야 해요. 이스케이프는\|,\{,\},\\예요.템플릿은 실행 중에 계산되는 문자열 식이라, 글자만 있는 템플릿은 불필요한 부담이에요. 고정 텍스트는 백틱 리터럴(`
text`)을 쓰라고 해요.제어 문자는
\n(줄바꿈),\t(탭),\r\n이고,cl_abap_char_utilities의 속성과 같아요.서식 옵션이 많아요. 날짜
DATE = ISO|USER|RAW|ENVIRONMENT, 시간TIME = ..., 타임스탬프TIMESTAMP = ..., 시간대TIMEZONE = 'CET' COUNTRY = 'DE ', 대소문자CASE = LOWER|UPPER, 너비와 정렬과 채움WIDTH = 10 ALIGN = RIGHT PAD = '.', 소수 자릿수DECIMALS = 3, 부호SIGN등이에요. 사용자 설정에 따라 출력이 달라지는 옵션(USER,ENVIRONMENT)과 고정 형식(ISO,RAW)을 구분해서 쓰세요.
나누기 (`SPLIT`)
대상 변수가 조각보다 적으면 마지막 변수가 나머지를 통째로 받고, 많으면 남는 변수는 초기화돼요. 조각 수를 모를 때는
INTO TABLE itab으로 나눠요.특정 번째 조각만 필요하면
segment( val = s1 index = 2 sep =,).
DATA(s1) = `Hallo,world,123`.
SPLIT s1 AT `,` INTO DATA(a) DATA(b) DATA(c).
DATA(second) = segment( val = s1 index = 2 sep = `,` ). " world고치기
공백 정리:
CONDENSE s.(앞뒤 공백 제거, 연속 공백을 하나로),CONDENSE s NO-GAPS.(모든 공백 제거). 내장 함수condense( )는 공백이 아닌 문자도 지정할 수 있다는 점이 장점이에요(del = '#').대소문자 변환은
to_upper( ),to_lower( ), 밀기와 뒤집기, 삽입, 겹쳐 쓰기(OVERLAY) 등이 있어요.
부분 문자열 접근
substring( val = s off = 6 len = 5 ).len을 안 쓰면 나머지 전부예요. 범위를 넘으면CX_SY_RANGE_OUT_OF_BOUNDS가 발생해요.변수 뒤에 오프셋과 길이로 접근할 수 있어요:
txt(5),txt+6(5),txt+12(*). 고정 길이 텍스트 필드에는 쓰기 접근도 돼요(txt(5) = 'Hallo'). 이 문법은 동적 프로그래밍의 토큰 표기와 혼동될 수 있다고 해요.substring_after,substring_before,substring_from,substring_to는 PCRE 정규식도 지원해요.
찾기와 바꾸기
find( val = str sub =ca)는 찾은 위치(오프셋)를 돌려주고 못 찾으면 -1 이에요.sub가 비어 있으면CX_SY_STRG_PAR_VAL예외예요.occ로 몇 번째 일치인지(음수는 오른쪽부터),off/len으로 범위를 정하고, 대소문자는 기본이 구분해요.FIND/REPLACE문장은 테이블 안의 검색 같은 추가 기능이 더 있어요.replace( )함수에서는occ = 0이 "모두 바꾸기"예요(find에서 0은 예외).
주의할 점
DATE = USER같은 옵션은 사용자 설정에 따라 결과가 달라서, 인터페이스 파일처럼 고정 형식이 필요한 곳에는ISO나RAW를 쓰는 것이 안전해요. 이 문장은 옵션 설명을 바탕으로 한 제 정리예요.치트시트의 오프셋 표기(
txt+6(5))는 클라우드용 ABAP 에서는 제한이 있을 수 있어요. 어느 환경에서 되는지는 확인하지 못했으니 내 환경에서 문법 검사를 해 보세요.치트시트는 계속 갱신되는 문서예요. 첫 공개는 2022년이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/07_String_Processing.md
출처와 이용 안내
원문: ABAP Cheat Sheets - String Processing · 작성자 SAP SE and contributors SAP-samples · 작성일 2022-12-05 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기