Im folgenden Beispiel werden Komponenten vom Typ X verwendet, um Zeichen abzulegen. In Unicode-Programmen ist dies nicht mehr möglich.
Vor der Unicode-Umstellung
data: begin of L_LINE,
TEXT1(10) type c,
MARK1(1) type x value '00',
TEXT2(10) type c,
MARK2(1) type x value '00',
TEXT3(10) type c,
MARK3(1) type x value '00',
BLANK(100) type c,
end of L_LINE,
HEX0(1) type x value '00',
CRLF(2) type x value '0D0A'.
L_LINE-TEXT 1 = 'SYSTEM: '.
L_LINE-TEXT 2 = 'USER: '.
L_LINE-TEXT 3 = 'CLIENT: '.
replace: HEX0 with SY-SYSID into L_LINE, ß Unicode-Fehler
HEX0 with SY-UNAME into L_LINE, ß Unicode-Fehler
HEX0 with SY-MANDT into L_LINE. ß Unicode-Fehler
condense L_LINE. ß Unicode-Fehler
concatenate L_LINE CRLF into L_LINE. ß Unicode-Fehler
*Weiterverarbeitung von L_LINE.
Nach der Unicode-Umstellung
Durch die Verwendung der Konstanten aus Klasse CL_ABAP_CHAR_UTILITIES kann die Verwendung von X-Feldern vollständig vermieden werden.
data:
begin of L_LINE,
TEXT1(10) type c,
MARK1(1) type c
TEXT2(10) type c,
MARK2(1) type c
TEXT3(10) type c,
MARK3(1) type c
BLANK(100) type c,
end of L_LINE,
HEX0(1) type c,
CRLF(2) type c.
HEX0 = CL_ABAP_CHAR_UTILITIES=>MINCHAR.
CRLF = CL_ABAP_CHAR_UTILITIES=>CR_LF.
L_LINE-TEXT1 = 'SYSTEM: '.
L_LINE-TEXT2 = 'USER: '.
L_LINE-TEXT3 = 'CLIENT: '.
replace: HEX0 with SY-SYSID into L_LINE,
HEX0 with SY-UNAME into L_LINE,
HEX0 with SY-MANDT into L_LINE.
condense L_LINE.
concatenate L_LINE CRLF into L_LINE.
*Weiterverarbeitung von L_LINE.
Anmerkung: Das vorgestellt Programm, das in ähnlicher Weise in einer "echten" Anwendung gefunden wurde, ist unnötig kompliziert und sicher kein Beispiel für einen guten Programmierstil. Eine viel klarere Lösung könnte folgendermaßen aussehen:
class CL_ABAP_CHAR_UTILITIES definition load.
data: L_LINE(133) type c.
concatenate ‘SYSTEM: ‘ SY-SYSID
‘USER: ‘ SY-UNAME
‘CLIENT: ‘ SY-MANDT
CL_ABAP_CHAR_UTILITIES=>CR_LF into L_LINE.