CSV-Daten in richtige Infotyp-spalte(itab)

Getting started ... Alles für einen gelungenen Start.
3 Beiträge Seite 1 von 1
3 Beiträge Seite 1 von 1

CSV-Daten in richtige Infotyp-spalte(itab)

Beitrag von NLengner (ForumUser / 13 / 2 / 2 ) » 20. Sep 2019 13:07

Hallo zusammen,

ich habe folgendes Problem.
Ich möchte eine CSV Datei von einem Infotypen hochladen.
Dabei kann es passieren das die CSV Daten vertauscht sind (z.B. ennda und begda).

Wie bekomme ich es gelöst, das es "automatisch", in einer neuen Tabelle, in die richtige spalte kommt? Mein Bisheriges Coding aus der methode:

Code: Alles auswählen.

   METHOD formate.
    DATA: controll TYPE abap_bool.
    FIELD-SYMBOLS: <test>  TYPE ANY TABLE,
                   <infty> TYPE ANY TABLE.

    ASSIGN ip_data->* TO <infty>.

    DATA: lt_table    TYPE TABLE OF string,
          t_kopfzeile TYPE TABLE OF string,
          lv_tabix    TYPE i,
          lv_placeh   TYPE char7 VALUE 'a*\,\a*',
          lv_replac   TYPE char1 VALUE '.'.

    lt_table = ip_uploaded_csv.

*    DATA(lv_condition) = |SPRPS NE 'X'|.

    LOOP AT lt_table REFERENCE INTO DATA(ls_uploaded_csv_document).

      IF ip_cb_head IS NOT INITIAL AND sy-tabix = 1.
        " Speichern der Kopfzeile
        SPLIT ls_uploaded_csv_document->* AT ';' INTO TABLE t_kopfzeile.

*       Index des Tabelleneintrags ermitteln
        DATA(idx) = line_index( t_kopfzeile[ table_line = 'SPRPS' ] ).

        CONTINUE.
      ENDIF.

      SPLIT ls_uploaded_csv_document->* AT ';' INTO TABLE DATA(t_splitted_table).

      LOOP AT t_splitted_table ASSIGNING FIELD-SYMBOL(<fs_splitted_table>).
        controll = abap_false.
        " Für spätere überprüfung ob das Datum falsch Formatiert ist
        DATA(zeile) = <fs_splitted_table>.

        IF ip_cb_mandt IS NOT INITIAL.
          lv_tabix = sy-tabix.
        ELSE.
          lv_tabix = sy-tabix + 1.
        ENDIF.

        IF idx = lv_tabix.
          DATA(iv_sprps) = 'SPRPS'.
          ASSIGN COMPONENT iv_sprps OF STRUCTURE cp_structure TO FIELD-SYMBOL(<fs_sprps>).
          IF <fs_sprps> IS NOT INITIAL.
            CLEAR cp_structure. controll = abap_true. EXIT.
          ENDIF.
        ENDIF.

        ASSIGN COMPONENT lv_tabix OF STRUCTURE cp_structure TO FIELD-SYMBOL(<fs_cell>).
        IF sy-subrc <> 0.
          EXIT.
        ENDIF.

        " Datum überprüfung
        IF cl_abap_matcher=>matches( pattern = '\d\d\.\d\d.\d\d\d\d' text = zeile ) = abap_true.
          <fs_splitted_table> = |{ zeile+6(4) }{ zeile+3(2) }{ zeile(2) }|.
        ENDIF.

        " Komma Zahlen in Punkt Zahlen umwandeln
        DATA(matcher) = cl_abap_matcher=>create( pattern = lv_placeh text = zeile ignore_case = abap_true ).
        " Alle Platzhalter mit Replacement ersetzen
        IF matcher->replace_all( lv_replac ) > 0.
          <fs_splitted_table> = matcher->text.
        ENDIF.

        <fs_cell> = <fs_splitted_table>.
      ENDLOOP.
      IF controll = abap_false.
        INSERT cp_structure INTO TABLE <infty>.
      ENDIF.
    ENDLOOP.

    ep_table = <infty>.
  ENDMETHOD.



Re: CSV-Daten in richtige Infotyp-spalte(itab)

Beitrag von DeathAndPain (Top Expert / 1135 / 128 / 242 ) » 20. Sep 2019 17:01

Verstehe ich das richtig - die richtige Spalte entnimmst Du der ersten Zeile Deiner CSV-Datei. Dort stehen die Spaltennamen drin, und anhand derer willst Du die Werte in Deine interne Tabelle einsortieren?

Kern und Angelpunkt der Lösung ist folgendes:

Code: Alles auswählen.

DATA workarea_deiner_internen_tabelle LIKE LINE OF deine_interne_tabelle.

ASSIGN COMPONENT spaltenname_aus_erster_csv_zeile OF STRUCTURE workarea_deiner_internen_tabelle TO <irgendein_feldsymbol>.

<irgendein_feldsymbol> = spalteninhalt_aus_csv_zeile.

APPEND workarea_deiner_internen_tabelle TO deine_interne_tabelle.
Natürlich taugt obiges Beispiel nur für eine Spalte. Da musst Du also entsprechend noch einen LOOP drum stricken, um alle Spalten abzufrühstücken.

Seite 1 von 1

Aktuelle Forenbeiträge

Web Service Restful API
vor 11 Stunden von Tron 2 / 32
Entwurfsmuster in ABAP / OO
vor 2 Tagen von Maximus 16 / 2132
VA01, Kundenauftragserfassung Preisdatum
vor 2 Tagen von SAP_ENTWICKLER 1 / 53
Rabax Fehlermeldung
vor 2 Tagen von zzcpak 2 / 84
Aufgabe Programm/- Tabellenerstellung
vor 2 Tagen von SaskuAc 3 / 84

Unbeantwortete Forenbeiträge

VA01, Kundenauftragserfassung Preisdatum
vor 2 Tagen von SAP_ENTWICKLER 1 / 53
HANA Audit Trail
vor einer Woche von JohnLocklay 1 / 97
Halber Tag Urlaub
vor einer Woche von SO4SAP 1 / 61
Funktionsbausteine BAPI_INCOMINGINVOICE*****
vor einer Woche von Rabea1103 1 / 70
S4/HANA in der Cloud / 14 Tage Trial
vor 3 Wochen von Tron 1 / 102