Show TOC Anfang des Inhaltsbereichs

Konvertierungsregeln für Strukturen  Dokument im Navigationsbaum lokalisieren

ABAP enthält eine Regel für die Konvertierung von Strukturen, die keine internen Tabellen und keine Strings als Komponenten enthalten. Es gibt keine Konvertierungsregeln für Strukturen, die interne Tabellen oder Strings beinhalten. Zuweisungen zwischen solchen Strukturen sind nur möglich, wenn sie kompatibel sind.

Für konvertierbare Strukturen gibt es folgende Kombinationen

·        Konvertierung von Strukturen in nichtkompatible Strukturen

·        Konvertierung von elementaren Feldern an Strukturen

·        Konvertierung von Strukturen an elementare Felder

In jedem dieser Fälle konvertiert das System zunächst alle beteiligten Strukturen in Felder vom Typ c und führt dann die Konvertierung zwischen den zwei verbleibenden elementaren Feldern durch. Die Längen der Felder vom Typ c ist die Summe der Längen der Komponenten. Diese Regel gilt bei allen Operationen mit Feldleisten, die keine internen Tabellen beinhalten.

Ist eine Struktur ausgerichtet, werden auch die Füllfelder zur Länge des Characterfeldes hinzugezählt.

Beispiel

Eine nichtausgerichtete Struktur ohne Füllfelder:

Diese Grafik wird im zugehörigen Text erklärt

Wird eine längere Struktur in eine kürzere konvertiert, werden die überflüssigen Teile weggelassen. Wird eine kürzere Struktur in eine längere konvertiert, werden die Komponenten am Ende nicht typspezifisch initialisiert, sondern mit Leerzeichen aufgefüllt.

Zuweisungen zwischen nichtkompatiblen Stukturen können sinnvoll sein, wenn zum Beispiel der Wert einer längeren Struktur an eine kürzere Struktur zugewiesen wird und die Konstruktion beider Strukturen über die Länge der kürzeren Struktur gleich ist. Dagegen können numerische Komponenten von Strukturen, die durch nichtkompatible Zuweisungen gefüllt wurden, sinnlose oder sogar illegale Werte enthalten, die zu einem Laufzeitfehler führen.

Beispiel

REPORT demo_data_conversion_structure.

DATA: BEGIN OF fs1,
         int      TYPE i            VALUE 5,
         pack     TYPE p DECIMALS 2 VALUE '2.26',
         text(10) TYPE c            VALUE 'Fine Text',
         float    TYPE f            VALUE '1.234e+05',
         date     TYPE d            VALUE '19950916',
      END OF fs1.

DATA: BEGIN OF fs2,
         int      TYPE i            VALUE 3,
         pack     TYPE p DECIMALS 2 VALUE '72.34',
         text(5)  TYPE c            VALUE 'Hello',
      END OF fs2.

WRITE: / fs1-int, fs1-pack, fs1-text, fs1-float, fs1-date.
WRITE: / fs2-int, fs2-pack, fs2-text.

MOVE fs1 TO fs2.
WRITE: / fs2-int, fs2-pack, fs2-text.

Listenausgabe:

        5          2.26 Fine Text   1.234000000000000E+05 09161995

        3         72.34 Hello

        5          2.26 Fine

In diesem Beispiel sind zwei verschiedene Strukturen definiert, fs1 und fs2. Die beiden ersten Komponenten haben den gleichen Datentyp. Nach Zuweisung von fs1 nach fs2 ist nur das Ergebnis für die ersten zwei Komponenten so, als seien sie komponentenweise übertragen worden. fs2-textwird mit den ersten fünf Stellen von fs1-text gefüllt. Alle übrigen Stellen von fs1 werden nicht übertragen.

 

Ende des Inhaltsbereichs