CLEAR in ABAP: Variablen, Strukturen und Tabellen initialisieren – Syntax und Anwendung

kategorie
ABAP-Statements
Veröffentlicht
autor
Johannes

Die CLEAR-Anweisung ist eine der grundlegendsten und am häufigsten verwendeten Anweisungen in ABAP. Ihr Zweck ist es, den Inhalt eines Datenobjekts (einer Variablen) auf seinen typgerechten Initialwert zurückzusetzen. Sie “löscht” oder “leert” also den aktuellen Wert der Variablen und stellt den Zustand her, den die Variable direkt nach ihrer Deklaration (ohne VALUE-Zusatz) hätte.

CLEAR ist auf nahezu alle Arten von Datenobjekten anwendbar:

  • Elementare Variablen (Zahlen, Text, Datum, Zeit, etc.)
  • Strukturen (Work Areas)
  • Interne Tabellen
  • Referenzvariablen (Objektreferenzen, Datenreferenzen)
  • Feldsymbole (wirkt auf das zugewiesene Datenobjekt)

Syntax

Die Syntax ist sehr einfach:

1. Zurücksetzen eines einzelnen Datenobjekts

CLEAR <datenobjekt>.
  • <datenobjekt>: Der Name der Variablen, der Struktur, der internen Tabelle etc., die zurückgesetzt werden soll.

2. Zurücksetzen mehrerer Datenobjekte (Kettenanweisung)

CLEAR: <datenobjekt1>, <datenobjekt2>, ..., <datenobjektN>.

Mit einem Doppelpunkt nach CLEAR und Kommas zwischen den Variablennamen können mehrere Datenobjekte in einer Anweisung zurückgesetzt werden.

Funktionsweise und Effekt auf verschiedene Datentypen

Der Initialwert, auf den CLEAR zurücksetzt, hängt vom Datentyp des Datenobjekts ab:

Elementare Typen

  • Numerisch (I, P, F, …): 0
  • Zeichenkette fester Länge (C, N, D, T): Mit Leerzeichen gefüllt (entsprechend der definierten Länge). Z.B. C(5) wird zu ' '.
  • Zeichenkette variabler Länge (STRING): Leerer String ('').
  • Byte-Kette fester Länge (X): Mit hexadezimal 00 gefüllt (entsprechend der definierten Länge). Z.B. X(2) wird zu X'0000'.
  • Byte-Kette variabler Länge (XSTRING): Leerer Byte-String.
  • Referenzen (TYPE REF TO ...): Die Referenz wird NULL (sie zeigt auf kein Objekt oder keinen Datenbereich mehr).

Strukturen

CLEAR wirkt auf jede Komponente der Struktur einzeln, entsprechend dem Datentyp der jeweiligen Komponente. Eine Struktur CLEARen bedeutet also, alle ihre Felder auf deren Initialwerte zu setzen.

Interne Tabellen

CLEAR <interne_tabelle>. löscht alle Zeilen aus dem Tabellenkörper. Die Tabelle ist danach leer (enthält 0 Zeilen). Der Speicher, der von den Zeilen belegt wurde, wird freigegeben (mit Ausnahme eines eventuell durch INITIAL SIZE reservierten Grundspeichers).

  • Hinweis zu Tabellen mit Kopfzeile (obsolet): Bei Tabellen, die noch mit der alten DATA <tabelle> TYPE <typ> OCCURS n WITH HEADER LINE.-Syntax deklariert wurden, setzt CLEAR <tabelle>. sowohl den Tabellenkörper als auch die Kopfzeile zurück. CLEAR <tabelle>[]. würde nur den Körper löschen. Bei modernen Tabellendeklarationen (DATA <tabelle> TYPE TABLE OF ...) gibt es keine Kopfzeile, und CLEAR <tabelle>. löscht immer den Körper.

Abgrenzung zu FREE

Obwohl CLEAR bei internen Tabellen den Speicher der Zeilen freigibt, gibt es noch die Anweisung FREE.

  • CLEAR: Setzt den Wert zurück. Bei Tabellen: Löscht Zeileninhalt und gibt Zeilenspeicher frei.
  • FREE: Ist aggressiver bei der Speicherfreigabe, insbesondere für interne Tabellen und Objekte wie Strings. FREE <tabelle>. versucht, den gesamten Speicher der Tabelle (inklusive Verwaltungsinformationen) an das Betriebssystem zurückzugeben. FREE setzt die Variable ebenfalls auf ihren Initialwert zurück. Man nutzt FREE meist, wenn sehr große Tabellen oder Objekte definitiv nicht mehr benötigt werden und der Speicher dringend freigegeben werden soll. Für einfache, elementare Variablen verhält sich FREE wie CLEAR.

Typische Anwendungsfälle für CLEAR

  • Initialisieren einer Variablen vor der (Wieder-)Verwendung, um sicherzustellen, dass keine alten Werte vorhanden sind.
  • Zurücksetzen einer Arbeitsstruktur (Work Area), bevor Daten aus einer neuen Zeile einer internen Tabelle eingelesen werden (wichtig in LOOP AT ... INTO wa.-Schleifen).
  • Leeren einer internen Tabelle, bevor sie mit neuen Daten gefüllt wird.
  • Zurücksetzen von Zählern, Summen oder Statusindikatoren.

Beispiele

1. Elementare Variablen

DATA count TYPE i VALUE 55.
DATA description TYPE string VALUE 'Ein Text'.
DATA is_valid TYPE abap_bool VALUE abap_true.
WRITE: / 'Vorher:', count, description, is_valid.
CLEAR: count, description, is_valid.
WRITE: / 'Nachher:', count, description, is_valid.

Ausgabe:

Vorher: 55 Ein Text X
Nachher: 0 ' '

(Beachte: abap_false wird als Leerzeichen ’ ’ dargestellt).

2. Struktur

TYPES: BEGIN OF ty_person,
name TYPE string,
age TYPE i,
END OF ty_person.
DATA person TYPE ty_person.
person-name = 'Meier'.
person-age = 42.
WRITE: / 'Person vorher:', person-name, person-age.
CLEAR person.
WRITE: / 'Person nachher:', person-name, person-age.

Ausgabe:

Person vorher: Meier 42
Person nachher: 0

3. Interne Tabelle

DATA number_table TYPE STANDARD TABLE OF i WITH EMPTY KEY.
APPEND 1 TO number_table.
APPEND 2 TO number_table.
APPEND 3 TO number_table.
WRITE: / 'Zeilen vor CLEAR:', lines( number_table ).
CLEAR number_table.
WRITE: / 'Zeilen nach CLEAR:', lines( number_table ).

Ausgabe:

Zeilen vor CLEAR: 3
Zeilen nach CLEAR: 0

4. Arbeitsbereich in einer Schleife

TYPES: BEGIN OF ty_item,
id TYPE i,
END OF ty_item.
DATA: lt_items TYPE STANDARD TABLE OF ty_item,
ls_item TYPE ty_item.
APPEND VALUE #( id = 10 ) TO lt_items.
APPEND VALUE #( id = 20 ) TO lt_items.
LOOP AT lt_items INTO ls_item.
WRITE: / 'Verarbeite ID:', ls_item-id.
" ... Logik mit ls_item ...
" Gute Praxis: Work Area für den nächsten Durchlauf oder spätere Verwendung leeren
CLEAR ls_item.
WRITE: ' | Work Area ID nach CLEAR:', ls_item-id.
ENDLOOP.

Ausgabe:

Verarbeite ID: 10 | Work Area ID nach CLEAR: 0
Verarbeite ID: 20 | Work Area ID nach CLEAR: 0

Zusammenfassend: CLEAR ist eine unverzichtbare Anweisung, um Datenobjekte kontrolliert in ihren definierten Anfangszustand zu versetzen. Sie ist einfach anzuwenden und essenziell für saubere Datenverarbeitung in vielen ABAP-Programmierszenarien.