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 hexadezimal00
gefüllt (entsprechend der definierten Länge). Z.B.X(2)
wird zuX'0000'
. - Byte-Kette variabler Länge (
XSTRING
): Leerer Byte-String. - Referenzen (
TYPE REF TO ...
): Die Referenz wirdNULL
(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 CLEAR
en 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, setztCLEAR <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, undCLEAR <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 nutztFREE
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 sichFREE
wieCLEAR
.
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 XNachher: 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 42Person 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: 3Zeilen 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: 0Verarbeite 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.