Dein Unternehmen ist auf der Suche nach neuen Kolleg:innen? Gerne weitersagen:Stellenanzeigen auf ABAPforum.com schalten
.Im weiteren Sinne werden aber alle ASCII-Tabellen, deren Spalten durch ein Trennzeichen voneinander getrennt sind, als CSV-Dateien bezeichnet. Ich möchte behaupten, dass semikolonseparierte CSV-Dateien häufiger sind als kommaseparierte, und tabulatorseparierte sieht man auch gelegentlich.Das ist keine CSV Datei. CSV bedeutet "Comma separated Values".
DAS ist eine CSV.cgreiner hat geschrieben: Warum ist dies keine CSV-Datei, die in Excel geöffnet habe und so einkopiert habe.
LFDNR;STKL;AF;F;ZKF;AJAHR;ALTER1;RE4;VBEZ;LZZ;KRV;KVZ;PKPV;PKV;PVS;PVZ;R;LZZFREIB;LZZHINZU;VJAHR;VBEZM;VBEZS;ZMVB;JRE4;JVBEZ;JFREIB;JHINZU;JRE4ENT;SONSTB;STERBE;VBS;SONSTENT;VKAPA;VMT;ENTSCH;LSTLZZ;SOLZLZZ;BK;STS;SOLZS;BKS;STV;SOLZV;BKV;VKVLZZ;VKVSONST;VFRB;VFRBS1;VFRBS2;WVFRB;WVFRBO;WVFRBM;VGL-KZ
00021;4;1;0,741;05,5;0000;0;00002049327;00000000000;1;2;0,00000;00000030144;2;0;0;1;00000000000;00000000000;0000;00000000000;00000000000;00;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000135100;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000000000;00000192146; ;00000100000;00000000000;00000000000;00000853527;00000000000;00000000000;OK
Code: Alles auswählen.
TYPES: BEGIN OF ty_csv,
matnr TYPE matnr, " Materialnummer
ersda TYPE string, " Erstelldatum Format 31.12.2999
END OF ty_csv.
TYPES: BEGIN OF ty_itab,
matnr TYPE matnr, " Materialnummer
ersda TYPE ersda, " Erstelldatum Format 99991231
END OF ty_itab.
DATA: t_itab TYPE STANDARD TABLE OF ty_itab,
wa_csv TYPE ty_csv,
wa_itab TYPE ty_itab.
* Upload Variable
DATA: h_filepath TYPE string.
* alv Listausgabe
DATA: go_alv TYPE REF TO cl_salv_table,
go_columns TYPE REF TO cl_salv_columns_table,
go_display TYPE REF TO cl_salv_display_settings,
go_layout TYPE REF TO cl_salv_layout,
go_functions TYPE REF TO cl_salv_functions_list, " toolbar
go_selections TYPE REF TO cl_salv_selections, " multiselect
gx_salv_msg TYPE REF TO cx_salv_msg, " exceptions
gx_salv_data_error TYPE REF TO cx_salv_data_error,
gs_layoutkey TYPE salv_s_layout_key.
Code: Alles auswählen.
PERFORM file_dialog.
PERFORM csv_upload.
IF t_itab IS NOT INITIAL.
PERFORM get_alv_settings.
go_alv->display( ).
ELSE.
MESSAGE 'Tabelle ist leer!' TYPE 'I'.
ENDIF.
Code: Alles auswählen.
*---------------------------------------------------------------------*
* Form file_dialog
*---------------------------------------------------------------------*
* File Dialog zum Aussuchen der CSV Datei
*---------------------------------------------------------------------*
FORM file_dialog.
DATA: h_files TYPE filetable,
h_count TYPE i,
h_action TYPE i.
CALL METHOD cl_gui_frontend_services=>file_open_dialog(
EXPORTING
initial_directory = 'C:\......'
default_filename = '*.csv'
file_filter = '*.csv'
CHANGING
file_table = h_files
rc = h_count
user_action = h_action
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5 ).
IF sy-subrc = 0.
* Dateipfad speichern, wenn der User nicht Abbrechen oder X geklickt hat
IF h_action <> 9.
READ TABLE h_files INDEX 1 INTO h_filepath.
ELSE.
MESSAGE 'Dateiupload abgebrochen!' TYPE 'E'.
ENDIF.
ELSE.
MESSAGE 'Error beim Auswählen der Datei!' TYPE 'E'.
ENDIF.
ENDFORM. "file_dialog
Code: Alles auswählen.
*---------------------------------------------------------------------*
* Form csv_upload
*---------------------------------------------------------------------*
* CSV Datei hochladen und in itab konvertieren
*---------------------------------------------------------------------*
FORM csv_upload.
DATA: t_upload TYPE textline_t,
wa_upload TYPE string.
DATA h_datum TYPE string.
DATA go_csv TYPE REF TO cl_rsda_csv_converter.
CALL METHOD cl_gui_frontend_services=>gui_upload
EXPORTING
filename = h_filepath
filetype = 'ASC'
has_field_separator = abap_true
CHANGING
data_tab = t_upload
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
not_supported_by_gui = 17
error_no_gui = 18
OTHERS = 19.
IF sy-subrc <> 0.
MESSAGE 'Error beim Upload der Datei!' TYPE 'E'.
ENDIF.
* Das Konvertierungs-Objekt erzeugen
CALL METHOD cl_rsda_csv_converter=>create
EXPORTING
i_separator = ';'
RECEIVING
r_r_conv = go_csv.
LOOP AT t_upload INTO wa_upload.
* Die mit Semikolon getrennten Einträge in einzelne Zellen aufteilen
CALL METHOD go_csv->csv_to_structure
EXPORTING
i_data = wa_upload
IMPORTING
e_s_data = wa_csv.
* Wenn wenigstens irgendwas in Zeile steht, dann in Tabelle schreiben
IF wa_csv-matnr IS NOT INITIAL OR wa_csv-ersda IS NOT INITIAL.
* In itab übertragen, ggf. Prüfungen/IF-Bedingungen machen
wa_itab-matnr = wa_csv-ersda.
CONCATENATE wa_csv-ersda+6(4) wa_csv-ersda+3(2) wa_csv-ersda(2) INTO h_datum.
wa_itab-ersda = h_datum.
APPEND wa_itab TO t_itab.
ENDIF.
CLEAR: wa_itab, wa_csv, h_datum.
ENDLOOP.
ENDFORM. "csv_upload
Code: Alles auswählen.
*---------------------------------------------------------------------*
* Form get_alv_settings
*---------------------------------------------------------------------*
* Ergebnisumfeld und -tabelle erstellen
*---------------------------------------------------------------------*
FORM get_alv_settings.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_alv
CHANGING
t_table = t_itab ).
CATCH cx_salv_msg INTO gx_salv_msg.
MESSAGE 'Die Listenausgabe konnte nicht generiert werden' TYPE 'E'.
ENDTRY.
* Zeilen farblich unterscheiden
TRY.
go_display = go_alv->get_display_settings( ).
go_display->set_striped_pattern( abap_true ).
CATCH cx_salv_data_error INTO gx_salv_data_error.
ENDTRY.
* Spaltenbreite optimieren
TRY.
go_columns = go_alv->get_columns( ).
go_columns->set_optimize( 'X' ).
CATCH cx_salv_data_error INTO gx_salv_data_error.
ENDTRY.
* Funktionstasten (Sortieren, Filtern, Excel-Export etc.)
go_functions = go_alv->get_functions( ).
go_functions->set_all( abap_true ).
* Dem Benutzer erlauben, eigene Anzeigevarianten zu speichern
go_layout = go_alv->get_layout( ).
gs_layoutkey-report = sy-repid.
go_layout->set_key( gs_layoutkey ).
go_layout->set_default( abap_true ).
go_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).
* Dem Benutzer erlauben, mehrere Zellen/Zeilen/Spalten zu selektieren
go_selections = go_alv->get_selections( ).
CALL METHOD go_selections->set_selection_mode
EXPORTING
value = if_salv_c_selection_mode=>multiple.
* Titel
go_display = go_alv->get_display_settings( ).
go_display->set_list_header( 'Inhalt der importierten CSV' ).
ENDFORM. "get_alv_settings