💡 공백정리 CONDENSE문


spaced_name(40) TYPE c VALUE 'Mr                    Joe            Smith.   . '.
CONDENSE spaced_name .
WRITE spaced_name .
uline .

이렇게 하면 결과물은
'Mr Joe Smith'가 된다.

 

💡 NO-GAPS 옵션사용


no-gaps는 모든 공백을 완전히 제거한다

CONDENSE spacename NO-GAPS.
WRITE: / spacename.

결과는 'MrJoeSmith' 가된다.

ABAP 문자열을 분석 & 조작

문자열 연결 (concatenating)

공백 제거 (condensing)

길이 구하기 (finding length)

문자열 내 문자 바꾸기 (replacing characters)

문자 검색 (searching)

문자열 이동 (shifting left/right)

문자열 분할 (splitting)

부분 문자열 추출 (subfields)


문자열 연결_concatenating

DATA: title(15)     TYPE c VALUE 'Mr',
      surname(40)   TYPE c VALUE 'Smith',
      forename(40)  TYPE c VALUE 'Joe',
      sep,
      destination(200) TYPE c.

✅ title(15) TYPE c VALUE 'Mr'

변수 이름: title

타입: c (문자형)

길이: 15자

초기값: 'Mr' → 즉, title 변수는 문자열 15자 크기의 필드이고, 값은 "Mr"로 초기화되어있음

Mr 뒤에는 자동으로 공백이 13칸이 들어감

 

✅ surname(40) TYPE c VALUE 'Smith'

이름: surname

타입: 문자형(c)

길이: 40자

값: 'Smith'

'Smith' 뒤에 35칸 공백이 들어감

 


✅ forename(40) TYPE c VALUE 'Joe'

→ 위와 동일, 'Joe' + 공백 37자

 

✅ destination(200) TYPE c.

결과 문자열을 저장할 변수

최대 200자까지 저장 가능

초기값은 공백

 

✅ sep 구분자 공백 1칸 

CONCATENATE title surname forename INTO destination SEPARATED BY sep.

=> 출력결과 Mr Smith Joe

 

destination의 문자열에 title + surname + forename 이 합쳐져서 들어간 것이라고 생각하면 된다.

sep이 들어가면 구분자 공백1값이 들어감

ABAB의 문자열 데이터 타입에는 두가지가 있다.

- C

- N

 

문자열 타입 C

: 영문자, 숫자 등 모든 문자를 담을 수 있는 타입

길이는 최소 1자, 최대 65,535자까지 가능


- C타입 포함 선언방법

DATA mychar1(10) TYPE c.

 

- C타입 생략 선언

DATA mychar1.

 

- 길이와 타입을 생략하면 기본 값은 길이 1의 C타입

DATA mychar2 TYPE c.          " 1자리 문자
DATA mychar3(5).              " TYPE c는 생략, 길이만 지정

 

- 테이블 필드 구조 그대로 복사 (LIKE 사용)

DATA my_surname(40) TYPE c.

기존에 있던 ZEMPLOYEES에 surname이라는 CHAR(40)필드가 있음

DATA my_surname LIKE zemployees-surname.

- LIKE 문을 사용해서 테이블 필드의 구조를 그대로 복사할 수 있다.

 

숫자형 문자열 타입 N 


- Numc타입은 문자형이지만, 숫자만 저장할 수 있는 특수 타입

- 입력 값은 오른쪽 정렬됨

- 숫자만 담고 계산은 하지 않을 때 이상적임

DATA znumber1(8) TYPE n.
DATA znumber1 LIKE zemployees-employee.

 

- C 타입과 달리, N타입은 초기값이 공백이 아니라 0

 

타입 설명 예시 특징
C 일반 문자 (알파벳, 숫자 등) DATA name(10) TYPE c. 공백으로 채워짐, 왼쪽 정렬
N 숫자 전용 문자 DATA empid(8) TYPE n. 숫자만 허용, 오른쪽 정렬, 초기값은 0
LIKE 기존 테이블 필드 구조 복사 DATA var LIKE table-field. 길이, 타입 자동 설정

 

 

왜 굳이 C가 있는데 N이 필요할까?

- SAP에서는 숫자로된  문자열 값을 다룰 일이 많기 때문

사원번호, 거래번호, 세금코드 등. 

 

 

ABAP에서는 숫자를 나눌 수 있는 3가지 방식이 있음

  1. 일반 나눗셈 ( / )
  2. 정수 나눗셈 ( DIV )
  3. 나머지 ( MOD ) 

이를 통해 소수점이 있는 결과, 정수결과, 나머지 값을 구분해 다룰 수 있음

 

기본 나눗셈 ( / )

`result2 = num3 / num4 .` : 일반적인 나눗셈 결과가 나옴 

 

정수 나눗셈 ( DIV )

` result3 = num3 DIV num4 `: 몫(정수부분)만 반환하고 소수점은 버림

 

나머지 연산 ( MOD )

` result4 = num5 MOD num6 ` : 나머지 값만 반환

REPORT z_division_example.

DATA: numa     TYPE p DECIMALS 2 VALUE '5.45',
      numb     TYPE p DECIMALS 2 VALUE '1.48',
      result1  TYPE p DECIMALS 2,   " 일반 나눗셈 결과
      result2  TYPE i,              " 정수 나눗셈 결과
      result3  TYPE p DECIMALS 2.   " 나머지 결과

" 일반 나눗셈 (소수 포함)
result1 = numa / numb.
WRITE: / '1. 일반 나눗셈 (/):', result1.

" 정수 나눗셈 (DIV)
result2 = numa DIV numb.
WRITE: / '2. 정수 나눗셈 (DIV):', result2.

" 나머지 계산 (MOD)
result3 = numa MOD numb.
WRITE: / '3. 나머지 계산 (MOD):', result3.

데이터 타입과 변환의 중요성

- 호환되지 않는 타입끼리의 계산은 피해야 함

- 타입 불일치로 문법 오류 or 런타임 오류가 발생함 

 

자동변환

SAP ABAP에는 표준 데이터 타입들 간에 자동으로 변환되는 기능이 내장되어있음

= 소스필드의 값을 대상 필드로 어떻게 옮기는지 결정하는 사전 정의된 로직

 

 

result1은 반올림되어 3이 되고,

num1이 5.5인 경우는 result1 = 6이 된다.

이처럼 ABAP은 자동으로 변환 규칙을 적용하기 때문에, 사용하는 데이터타입에 대한 이해가 필요하다.

 

내용설명

데이터 타입은 호환되어야 함 정수 × 문자 = ❌
자동 변환 있음 소수 → 정수 자동 변환 (반올림 또는 버림)
예시 5.55 → 6, 3.33 → 3
주의 자동 변환이 항상 적절한 건 아니므로, 상황에 따라 직접 가공 필요

 

뺄셈은 덧셈과 마찬가지로 result에 - 를 붙이면 된다.

integer01 = 22;

packed_decimal = -5.5

 

결과.

 

이와같이 결과가 나온다.

ABAP에서는 숫자를 출력할 때 음수기호 -를 뒤에 붙이는 형식을 사용하기 때문에,

4.0- & 121,0- 로 나온다

 

1. 새 변수 선언

2. LIKE 사용하여 기존 변수 타입따르기

 

DATA result LIKE packed_decimal01.

 

계산식 작성

 

result = integer01 + packed_decimal01.

연산의 규칙

1. 산술 연산에서는 항상  = (대입연산자) 가 필요함

2. 결과를 저장할 변수는 = 왼쪽에 있어야함

3. 실제 계산식은 = 오른쪽 위치함

4. 계산 후에는 왼쪽 변수에만 결과가 저장됨

5. 기호 앞뒤에는 공백을 반드시 넣어야함

6. +, -, *, / 같은 연산자 앞뒤에도 공백을 넣어야함

7. 계산식이 복잡해지면 괄호도 씀 => 괄호 앞뒤에도 반드시 공백을 넣어야함

 

결과

 

변수 + '뉴메릭 숫자' 넣었을 때

 

 

위와 같은 결과가 나온다.

DATA integer01 TYPE i.

💡 필드란?

이름을 붙일 수 있는 임시 메모리 공간.


- 계산 결과를 저장하거나, 프로그램의 흐름을 제어할 때 사용됨

- Ram에 저장되므로 접근 속도가 매우 빠름 => 프로그램 실행 속도를 빠르게 하는데 도움이 됨!

- 변수, 상수와 같은 두가지 종류가 있음

  1. 변수
  2. 상수

 

변수란?


: 변수는 프로그램 실행 중 값이 바뀔 수 있는 필드를 의미함

이름 명명 규칙:

1. 영문자로 시작함

2. 최대 30자

3. +, ,(콤마), :(콜론), 괄호() 사용불가

4. 예약어 사용불가

 

DATA문으로 변수선언


변수는 DATA문장으로 선언함

DATA integer01 TYPE i.

- DATA -> 변수선언

- integer01 -> 변수 이름

- TYPE i -> 정수형 타입

- . -> 문장끝

소수점 숫자 저장용 변수 선언

DATA packed_decimal01 TYPE p DECIMALS 2.

- TYPE p -> 소수점 있는 숫자

- DECIMALS 2 -> 소수점 2자리까지 저장

✅ Packed decimal은 최대 14자리 소수까지 저장할 수 있어 비즈니스 용도에 충분함 

 

LIKE 구문사용(참조형 변수선언)

- TYPE대신 LIKE를 쓰면, 다른 변수의 타입을 그대로 복사할 수 있음

DATA packed_decimal02 LIKE packed_decimal01.

- 원본 타입을 바꾸면, LIKE로 선언한 변수들도 자동으로 따라감

☑ 테이블의 필드도 참조 가능

DATA new_surname LIKE zemployees-surname.

=> 정확한 타입을 일일이 외우거나 찾지 않아도 돼서 편리함

 

초기값_INITIAL VALUE지정

- 변수에 초기값을 지정할 땐 VALUE를 씀

DATA integer01 TYPE i VALUE 22.
DATA packed_decimal01 TYPE p DECIMALS 2 VALUE '12.34'.

- packed decimal처럼 소수점있는 숫자는 ''작은따옴표로 감싸야함 (마침표가 소수점인지 문장끝인지 혼동되지 않기 위해)

- 음수 값도 - 기호를 붙여서 선언할 수 있음

 

 

상수(constants)란?


: 상수는 변수와 비슷하지만, 프로그램 실행 중 값이 변하지 않음

- 세율, 환율, 고정된 코드값 등 변하지 않는 값을 표현할 때 유용함

CONSTANTS pi TYPE p DECIMALS 2 VALUE '3.14'.

CONSTANTS → 상수 선언

pi → 이름

TYPE p → 소수점 있는 숫자

DECIMALS 2 → 소수점 둘째자리까지

VALUE '3.14' → 초기값 지정

 

ex) 총액에 세율을 곱하는 계산

 

CONSTANTS tax_rate TYPE p DECIMALS 2 VALUE '0.10'.

DATA total TYPE p DECIMALS 2 VALUE '100.00'.
DATA tax   TYPE p DECIMALS 2.

tax = total * tax_rate.
WRITE: / 'Tax:', tax.

- 고정된 값들을 명확하고 일관되게 관리가능

 

변수 DATA 값이 변경 가능
상수 CONSTANTS 한 번 설정한 값은 변경 불가
참조형 선언 LIKE 기존 변수나 테이블 필드의 타입을 그대로 사용
초기값 설정 VALUE 변수나 상수에 초기값을 부여

 

⭐️ 상수를 정의할 수 없는 경우

X 문자열(X string)

참조형 타입(reference)

내부 테이블(internal tables)

내부 테이블을 포함한 구조체(structure)

- 상수는 값이 고정된 단일 데이터여야함

타입이유

XSTRING 크기가 고정되지 않은 이진 데이터 (예: 이미지, 파일)
REFERENCE 포인터처럼 다른 객체를 참조하는 값 → 고정값 아님
INTERNAL TABLE 행 수가 유동적이고, 복잡한 구조를 가짐
STRUCTURE with table 내부에 또 테이블을 가진 복합 구조 → 값이 복잡함

 

주석하는 방법

 

범위 지정 후 `ctrl + <`

 

주석을 풀고 싶으면 `ctrl + >`를 하면 된다.

또는 메뉴에서 Utilities > Block/Buffer > Insert Comment

 

 

💡 write를 한번에 쓰는 방법


':/' 로 쓰면 된다.

 

WRITE : / zemployees-surname,
	 zemployees-forename,
     zmployees-dob.

 

 

똑같은 결과물이다.

+ Recent posts