Code: Alles auswählen.
METHOD formate.
FIELD-SYMBOLS: <infty> TYPE ANY TABLE,
<structure> TYPE any.
ASSIGN ip_data->* TO <infty>.
ASSIGN ip_structure->* TO <structure>.
DATA: lt_csv_tab TYPE TABLE OF string,
typedescr TYPE REF TO cl_abap_typedescr,
structdescr TYPE REF TO cl_abap_structdescr.
CALL METHOD cl_abap_typedescr=>describe_by_data_ref
EXPORTING
p_data_ref = ip_structure " Referenz auf zu beschreibenes Datenobjekt
RECEIVING
p_descr_ref = typedescr " Referenz auf Beschreibungsobjekt
EXCEPTIONS
reference_is_initial = 1
OTHERS = 2.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_formate_error.
ENDIF.
structdescr ?= typedescr.
lt_csv_tab = ip_uploaded_csv.
LOOP AT lt_csv_tab REFERENCE INTO DATA(input).
IF sy-tabix = 1.
SPLIT input->* AT ';' INTO TABLE DATA(header).
DATA(index_sprps) = line_index( header[ table_line = 'SPRPS' ] ).
CHECK index_sprps IS NOT INITIAL.
ELSE.
SPLIT input->* AT ';' INTO TABLE DATA(fields).
IF fields[ index_sprps ] IS NOT INITIAL.
CONTINUE.
ENDIF.
LOOP AT fields REFERENCE INTO DATA(field).
ASSIGN COMPONENT header[ sy-tabix ] OF STRUCTURE <structure> TO FIELD-SYMBOL(<cell>).
CASE structdescr->get_component_type( header[ sy-tabix ] )->type_kind.
WHEN cl_abap_typedescr=>typekind_packed.
TRANSLATE field->* USING ',.'.
WHEN cl_abap_typedescr=>typekind_date.
IF find_regex( ip_regex = '\d\d\.\d\d.\d\d\d\d' ip_text = field->* ) = abap_true.
<cell> = |{ field->*+6(4) }{ field->*+3(2) }{ field->*(2) }|.
ELSEIF find_regex( ip_regex = '\d\d\d\d\-\d\d\-\d\d' ip_text = field->* ) = abap_true.
REPLACE ALL OCCURRENCES OF '-' IN field->* WITH ''.
<cell> = field->*.
ENDIF.
WHEN OTHERS.
<cell> = field->*.
ENDCASE.
ENDLOOP.
INSERT <structure> INTO TABLE <infty>.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE zcx_formate_error.
ENDIF.
CLEAR <structure>.
ENDIF.
ENDLOOP.
SORT <infty> ASCENDING BY ('BEGDA') ('PERNR') ('SUBTY').
ep_table = <infty>.
ENDMETHOD.
Wie du schon erkannt hast, ist es für eine Produktive Tätigkeit.Ist das eine Übungsaufgabe oder eine produktive Tätigkeit? Dein Coding sieht nach Letzterem aus, aber weshalb sollte man Dir dann verbieten, RTTS zu nutzen? Das halte ich hier für den Weg der Wahl.
Code: Alles auswählen.
APPEND INITIAL LINE TO ep_table ASSIGNING FIELD-SYMBOL(<ls_data>).
Und dann statt ASSIGN COMONENT header[ sy-tabix ] einfach ein ASSIGN COMPONENT sy-tabix
Verstehe ich das Richtig, dass du wissen möchtest welchen Typ EP_Table hat?black_adept hat geschrieben: ↑12.12.2019 16:06Ist EP_TABLE , in die du ganz am Ende deine gesplitteten Daten einfügst vom richtigen Typ der in der Übergabestruktur IP_STRUCTURE benannt wird?
Wenn ja, dann:Damit kommt man dann auch ohne RTTI aus.Code: Alles auswählen.
APPEND INITIAL LINE TO ep_table ASSIGNING FIELD-SYMBOL(<ls_data>). Und dann statt ASSIGN COMONENT header[ sy-tabix ] einfach ein ASSIGN COMPONENT sy-tabix
Code: Alles auswählen.
DATA: s_ip_table TYPE REF TO data.
CREATE DATA s_ip_table LIKE LINE OF <infty>.
ASSIGN s_ip_table->* TO <structure>.