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 / 7 / 2 ) »
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.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


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

Beitrag von wreichelt (Top Expert / 1031 / 29 / 188 ) »
Hallo,

unter dem Link ist ein Beispiel

https://blogs.sap.com/2019/09/20/dynami ... ase-table/


Gruß Wolfgang

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

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
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

Vergleichbare Themen

4
Antw.
269
Views
Update der Daten einer ITAB
von OG-TR2506 » 10.02.2023 15:06 • Verfasst in ABAP® für Anfänger
6
Antw.
4349
Views
Bestimmte Spalte einer bestimmten Zeile in einer itab
von DonBosca » 19.10.2005 13:34 • Verfasst in ABAP® für Anfänger
1
Antw.
418
Views
itab-Datensätze mit TVKO-Daten anreichern
von kolumbus70 » 14.07.2019 11:19 • Verfasst in ABAP® für Anfänger
6
Antw.
397
Views
In einer interne Tabelle eine Spalte mit Daten hinzufügen
von HH_ABAP » 29.04.2023 17:48 • Verfasst in ABAP® für Anfänger
3
Antw.
1729
Views
Daten aus einer Tabelle in eine itab schreiben
von zitroneHR » 30.03.2017 11:17 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 3 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141