바로투입이력카드
SAP 게시판

정보·팁

ABAP 문자열 처리 정리: string과 c, 문자열 템플릿, SPLIT, 부분 문자열

에이든ABAP 개발자운영자모듈 MMSD기타조회 2

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

아직 댓글이 없어요.

정보·팁 목록전체 목록