Anfang des Inhaltsbereichs

Interne Tabellen vergleichen Dokument im Navigationsbaum lokalisieren

Wie alle Datenobjekte können interne Tabellen als Operanden logischer Ausdrücke eingesetzt werden:

.... <itab1> <operator> <itab2> ...

Für <operator> können alle für Vergleiche zwischen verschiedenen Datentypen möglichen Operatoren verwendet werden (EQ, =, NE, <>, ><, GE, >=, LE, <=, GT, >, LT, <).

Bei Tabellen mit Kopfzeile ist zu beachten, daß Kopfzeile und Tabellenkörper den gleichen Namen haben. Um nicht die Kopfzeile, sondern die Tabelle selbst bei einem Vergleich anzusprechen, müssen hinter dem Namen zwei eckige Klammern ( []) angehängt werden.

Das erste Kriterium für einen Vergleich interner Tabellen ist die Anzahl der Zeilen. Je mehr Zeilen ein interne Tabelle enthält, desto größer ist sie. Enthalten zwei interne Tabellen die gleiche Anzahl an Zeilen, werden Sie Zeile für Zeile und Komponente für Komponente verglichen. Handelt es sich bei den Komponenten der Tabellenzeilen um geschachtelte interne Tabellen, werden sie rekursiv verglichen. Bei anderen Operatoren als dem Gleichheitsoperator, hält der Vergleich nach dem ersten ungleichen Komponentenpaar an und gibt das entsprechende Ergebnis zurück.

Beispiel

REPORT demo_int_tables_compare .

DATA: BEGIN OF line,
col1 TYPE i,
col2 TYPE i,
END OF line.

DATA: itab LIKE TABLE OF line,
jtab LIKE TABLE OF line.

DO 3 TIMES.
line-col1 = sy-index.
line-col2 = sy-index ** 2.
APPEND line TO itab.
ENDDO.

MOVE itab TO jtab.

line-col1 = 10. line-col2 = 20.
APPEND line TO itab.

IF itab GT jtab.
WRITE / 'ITAB GT JTAB'.
ENDIF.

APPEND line TO jtab.

IF itab EQ jtab.
WRITE / 'ITAB EQ JTAB'.
ENDIF.

line-col1 = 30. line-col2 = 80.
APPEND line TO itab.

IF jtab LE itab.
WRITE / 'JTAB LE ITAB'.
ENDIF.

line-col1 = 50. line-col2 = 60.
APPEND line TO jtab.

IF itab NE jtab.
WRITE / 'ITAB NE JTAB'.
ENDIF.

IF itab LT jtab.
WRITE / 'ITAB LT JTAB'.
ENDIF.

Die Listenausgabe ist:

ITAB GT JTAB

ITAB EQ JTAB

JTAB LE ITAB

ITAB NE JTAB

ITAB LT JTAB

Es werden zwei Standard-Tabellen, ITAB und JTAB, angelegt. ITAB wird mit drei Zeilen gefüllt und JTAB zugewiesen. ITAB wird eine weitere Zeile hinzugefügt und der erste logische Ausdruck gibt zurück, daß ITAB größer als JTAB ist. Nachdem JTAB die gleiche Zeile angehängt wurde, zeigt der zweite logische Ausdruck, daß beide Tabellen gleich sind. Dann wird ITAB eine weitere Zeile angehängt und der dritte logische Ausdruck zeigt an, daß JTAB kleiner gleich ITAB ist. Dann wird eine weitere Zeile an JTAB angehängt, deren Inhalt ungleich dem Inhalt der letzten Zeile von ITAB ist. Der nächste logische Ausdruck gibt zurück, daß ITAB ungleich JTAB ist. Das erste Tabellenfeld, dessen Inhalt für ITAB und JTAB unterschiedlich ist, ist COL1 in der letzten Tabellenzeile, nämlich 30 für ITAB und 50 für JTAB. Im letzten logischen Ausdruck ist daher ITAB kleiner als JTAB.

Ende des Inhaltsbereichs