Using Offset in SAP ABAP Strings

In SAP ABAP, you can use offsets to access or manipulate parts of a string by specifying a starting position and an optional length.


1. Accessing a Character at a Specific Offset

You can access a specific character in a string using an offset.

DATA: lv_string TYPE string VALUE 'HELLO ABAP',
lv_char TYPE c LENGTH 1.
lv_char = lv_string+6(1). " Extracts the character at offset 6
WRITE: lv_char. " Output: A

2. Extracting a Substring Using Offset and Length

You can extract a part of a string by specifying the offset (starting position) and length.

DATA: lv_string TYPE string VALUE 'HELLO ABAP',
lv_substring TYPE string.
lv_substring = lv_string+6(4). " Extracts 4 characters starting from position 6
WRITE: lv_substring. " Output: ABAP

3. Modifying a String Using Offset

You can modify specific parts of a string using an offset.

DATA: lv_string TYPE string VALUE 'HELLO ABAP'.
lv_string+6(4) = 'CODE'. " Replace 'ABAP' with 'CODE'
WRITE: lv_string. " Output: HELLO CODE

4. Using Offset in Loops to Process Characters

You can loop through a string using offsets.

DATA: lv_string TYPE string VALUE 'HELLO',
lv_char TYPE c LENGTH 1,
lv_len TYPE i.
lv_len = STRLEN( lv_string ).
DO lv_len TIMES.
lv_char = lv_string+sy-index-1(1). " Extract each character
WRITE: / lv_char.
ENDDO.

5. Handling Dynamic Offsets (Avoiding Overflow)

If the offset is greater than the string length, ABAP will trigger a runtime error. You should check the string length before using an offset.

DATA: lv_string TYPE string VALUE 'ABAP',
lv_length TYPE i.
lv_length = STRLEN( lv_string ).
IF lv_length >= 5.
WRITE: lv_string+4(1). " Safe access
ELSE.
WRITE: 'Offset too large!'.
ENDIF.

Best Practices

UsageSyntaxExampleNotes
Extract character at offsetstring+offset(1)lv_string+6(1)"A"Single character
Extract substringstring+offset(length)lv_string+6(4)"ABAP"Part of a string
Modify part of a stringstring+offset(length) = 'new_value'lv_string+6(4) = 'CODE'Replaces content
Loop through charactersDO STRLEN(string) TIMESLoop and print each charUseful in processing