Code: Alles auswählen.
ASSIGN COMPONENT header[ sy-tabix ] OF STRUCTURE <structure> TO FIELD-SYMBOL(<cell>).
Code: Alles auswählen.
TRANSLATE field->* USING ',.'.
Code: Alles auswählen.
LOOP AT lt_csv_tab REFERENCE INTO DATA(input).
IF sy-tabix = 1.
SPLIT input->* AT ';' INTO TABLE DATA(header).
DATA(idx) = line_index( header[ table_line = 'SPRPS' ] ).
ELSE.
SPLIT input->* AT ';' INTO TABLE DATA(fields).
CHECK idx IS NOT INITIAL.
READ TABLE fields INDEX idx ASSIGNING FIELD-SYMBOL(<test>).
CHECK <test> IS INITIAL.
structdescr ?= cl_abap_structdescr=>describe_by_data( <structure> ).
LOOP AT fields REFERENCE INTO DATA(field).
ASSIGN COMPONENT header[ sy-tabix ] OF STRUCTURE <structure> TO FIELD-SYMBOL(<cell>).
datadescr ?= structdescr->get_component_type( header[ sy-tabix ] ).
IF abap_true = datadescr->applies_to_data( currency_6 )
OR abap_true = datadescr->applies_to_data( currency_8 )
OR abap_true = datadescr->applies_to_data( currency_13 )
OR abap_true = datadescr->applies_to_data( dezimals ).
TRANSLATE field->* USING ',.'.
ELSEIF abap_true = datadescr->applies_to_data( datum ).
IF cl_abap_matcher=>matches( pattern = '\d\d\.\d\d.\d\d\d\d' text = field->* ).
<cell> = |{ field->*+6(4) }{ field->*+3(2) }{ field->*(2) }|.
ENDIF.
ELSE.
<cell> = field->*.
ENDIF.
ENDLOOP.
INSERT <structure> INTO TABLE <infty>.
CLEAR <structure>.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
REPLACE ALL OCCURRENCES OF REGEX '(\d),(\d)' IN field->* WITH '$1.$2'.
Code: Alles auswählen.
CASE datadescr->TYPE_KIND.
WHEN CL_ABAP_DATADESCR=>TYPEKIND_DECFLOAT
OR CL_ABAP_DATADESCR=>TYPEKIND_DECFLOAT16
OR CL_ABAP_DATADESCR=>TYPEKIND_DECFLOAT34
OR CL_ABAP_DATADESCR=>TYPEKIND_FLOAT
OR CL_ABAP_DATADESCR=>TYPEKIND_INT
OR CL_ABAP_DATADESCR=>TYPEKIND_INT1
OR CL_ABAP_DATADESCR=>TYPEKIND_INT2
OR CL_ABAP_DATADESCR=>TYPEKIND_NUM
OR CL_ABAP_DATADESCR=>TYPEKIND_PACKED.
Umwandlungscode
ENDCASE.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
NLengner
Code: Alles auswählen.
abap_typekind type c length 1, " check CL_ABAP_TYPEDESCR for values
Du hast sicher recht, dass es nicht narrensicher ist. In dem Fall würde aber 1, 2, 3 bleiben wegen des Spaces :)NLengner hat geschrieben: ↑19.11.2019 13:45Stumpfes Beispiel: Infospalte mit dem Inhalt: "Die Inhalte von 1, 2, 3, 4 haben ....".
Am ende würde es so aussehen "Die Inhalte von 1. 2. 3. 4. haben ..".
Es soll wirklich nur auf currency Felder oder Dezimal Felder passieren, ohne das ich 100 variablen erstellen muss. :)