Zum Hauptinhalt springen

ABAP: Führende Nullen in Variablen bearbeiten

Nullen hinzufügen

SHIFT

Der `SHIFT`-Befehl ist für **String-Variablen konzipiert** und soll den Inhalt einer Variablen verschieben. Diese Funktion wird hier entsprechend genutzt um anschließend den leeren Bereich vorne mit Nullen aufzufüllen.

Beispiel:

In einer Variablen des Typen C und der Länge 10, steht eine Zahl (z.B. drei Ziffern). Diese Variable soll mit führenden Nullen, auf die komplette Länge, aufgefüllt werden. Hierbei wird, wie bei einer Maske, über sämtliche Stellen Nullen gelegt in die dann die Ziffern eingebettet werden.
Beim SHIFT-Befehl wird die gleiche Variable mit Nullen aufgefüllt. Beim UNPACK-Befehl wird beim Transfer von der Quell- zur Ziel-Variablen die Nullen aufgefüllt.

DATA lv_text(10) TYPE c.

SHIFT lv_text RIGHT DELETING TRAILING SPACE.
OVERLAY lv_text WITH '0000000000'.
RESULTAT:

Vorher:

lv_text = '123'

Nachher:

lv_text = '0000000123'

UNPACK

Der UNPACK-Befehl ist noch einfacher zu handhaben. In diesem Beispiel wird eine Variable zur anderen geschoben und fehlende Nuller vorne dran gepackt.
Der Befehl erwartet hierbei von einem Datentyp P der Länge 16 ohne Nachkommastellen. Liegt dieser Datentyp nicht vor, so wird in diesen Datentyp konvertiert, wobei ein Dezimaltrennzeichen völlig ignoriert wird (s. Beispiel).
Die Ziffern werden rechtsbündig und ohne Vorzeichen der Ziel-Variable zugewiesen. Überzählige Stellen werden links mit Nullen aufgefüllt. Reicht die Länge des Ziels nicht aus, so wird die Zahl links (also Vorne) abgeschnitten.

Beispiel:

Vorher:

lv_text = '123.45'

Nachher:

lv_vbeln = '0000012345'

DATA
: lv_text(6) TYPE c
, lv_vbeln TYPE vbeln
.

UNPACK lv_text TO lv_vbeln.

Nullen löschen

Jetzt das ganze wieder Rückgängig:

SHIFT lv_text LEFT DELETING LEADING '0'.

Alternative: CONVERSION EXIT

Neben der eben gezeigten Variante, welche unabhängig von den hinterlegten Datenelementen und -domänen funktioniert, gibt es auch noch den Standard-Konvertierungsbaustein. Bei der Konvertierung vom externen in das interne Format wird geprüft, ob die Eingabe in Feld INPUT rein numerisch ist, also nur aus Ziffern, möglicherweise mit Leerzeichen davor und/oder dahinter, besteht.

  • Wenn ja, dann wird die Ziffernfolge rechtsbündig in das Ausgabefeld OUTPUT gestellt, und dieses wird links mit Nullen ('0') aufgefüllt.
  • Andernfalls wird die Zeichenfolge von links nach rechts in das Ausgabefeld übertragen, und dieses wird rechts mit Leerzeichen aufgefüllt.
DATA
: lv_string TYPE CHAR4
, lv_fevor TYPE fevor
.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = lv_string
IMPORTING
OUTPUT = lv_fevor
.
RESULTAT NUMERISCH:

Vorher:

lv_string = '1'

Nachher:

lv_fevor = '001'

RESULTAT ALPHANUMERISCH:

Vorher:

INPUT = 'A'

Nachher:

OUTPUT = 'A '