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 / 31 / 6 / 2 ) » 20.09.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 / 1456 / 159 / 331 ) » 20.09.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

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

Neue Felder cji5
vor 2 Stunden von Rabea1103 1 / 17
Abap Karriere Tipps
vor 2 Stunden von Cargo2 5 / 154
Last erzeugen im SAPGui?
vor 23 Stunden von black_adept 21 / 277

Vergleichbare Themen

Bestimmte Spalte einer bestimmten Zeile in einer itab
von DonBosca » 19.10.2005 13:34
itab-Datensätze mit TVKO-Daten anreichern
von kolumbus70 » 14.07.2019 11:19
Daten aus einer Tabelle in eine itab schreiben
von zitroneHR » 30.03.2017 11:17
Daten in ITAB lesen für jeden Eintrag ohne Loop
von kpas » 04.08.2006 08:07
move itab 1 nach itab 2 mit bedingung
von c oco » 17.04.2012 14:39