Code: Alles auswählen.
REPORT.
CLASS conv DEFINITION.
PUBLIC SECTION.
CLASS-METHODS struc IMPORTING i TYPE clike EXPORTING e TYPE any.
ENDCLASS.
CLASS conv IMPLEMENTATION.
METHOD struc.
DATA sd TYPE REF TO cl_abap_structdescr. "structure Description
DATA source TYPE string.
source = i.
TRY.
"Datenbeschreibung für Zielstruktur
sd ?= cl_abap_typedescr=>describe_by_data( e ).
"Komponenten der Struktur
DATA(components) = sd->get_components( ).
LOOP AT components INTO DATA(component).
"Wert des der aktuellen Komponente zuweisen
ASSIGN COMPONENT component-name OF STRUCTURE e TO FIELD-SYMBOL(<field>).
CHECK sy-subrc = 0.
"Elementbeschreibung holen, um die Ausgabelänge zu haben
DATA(ed) = CAST cl_abap_elemdescr( component-type ).
TRY.
"Zuweisung des Teilstring
<field> = source(ed->output_length).
CATCH cx_sy_conversion_overflow.
"Feldüberlauf...
CLEAR <field>.
ENDTRY.
"Verschieben des Datenstrings um die Ausgabelänge
SHIFT source LEFT BY ed->output_length PLACES.
ENDLOOP.
CATCH cx_sy_move_cast_error.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
TYPES: BEGIN OF ty_struc,
felda TYPE c LENGTH 10,
feld1 TYPE p LENGTH 2 DECIMALS 1, "Ausgabelänge 5
feld2 TYPE p LENGTH 2 DECIMALS 2, "Ausgabelänge 5
feld3 TYPE p LENGTH 3 DECIMALS 2, "Ausgabelänge 7
feld4 TYPE p LENGTH 4 DECIMALS 2, "Ausgabelänge 9
feld5 TYPE p LENGTH 5 DECIMALS 2, "Ausgabelänge 11
feldz TYPE c LENGTH 10,
END OF ty_struc.
DATA: struc TYPE ty_struc,
var TYPE string.
var = `abcdefghij 1.1 2.22 333.33- 4444.44 555555.55-klmnopqrst`.
conv=>struc( EXPORTING i = var IMPORTING e = struc ).
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE struc TO FIELD-SYMBOL(<f>).
IF sy-subrc = 0.
WRITE: <f> COLOR COL_NORMAL.
ELSE.
EXIT.
ENDIF.
ENDDO.