Code: Alles auswählen.
START-OF-SELECTION.
***************************************************************************************************************
* Upload Datein
lv_path_as_c = lv_path.
TRANSLATE p_link TO UPPER CASE.
"Hole Dateityp
CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'
EXPORTING
filename = lv_path_as_c
uppercase = 'X'
IMPORTING
extension = lv_zip_csv.
CASE lv_zip_csv.
WHEN 'ZIP' OR 'CSV'.
WHEN OTHERS.
MESSAGE: 'Bitte eine CSV oder ZIP Datein einfügen.' TYPE 'I' DISPLAY LIKE 'E'.
LEAVE TO LIST-PROCESSING. EXIT.
ENDCASE.
"Speichern in Tabelle
cl_gui_frontend_services=>gui_upload(
EXPORTING
filename = lv_path
filetype = 'BIN'
has_field_separator = ''
codepage = '4110'
IMPORTING
filelength = lv_size
CHANGING
data_tab = lt_inputtab_xstring ).
"Übersetzen in string
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
input_length = lv_size
IMPORTING
buffer = lv_xstring_buffer
TABLES
binary_tab = lt_inputtab_xstring.
CASE lv_zip_csv.
Habe ich schon versucht gehabt. Aber es kommt immer zu einem Fehler.
Doch schon, ich wollt aber mal probieren ob es auch ohne den AS funktioniert.
Code: Alles auswählen.
CASE lv_zip_csv.
***************************************************************************************************************
* Bearbeitung & upload ZIP Datei
WHEN 'ZIP'.
CREATE OBJECT lo_zip.
lo_zip->load( lv_xstring_buffer ).
LOOP AT lo_zip->files ASSIGNING FIELD-SYMBOL(<fs_zip_data>).
lo_zip->get( EXPORTING name = <fs_zip_data>-name IMPORTING content = lv_zip_content_xstring ).
DATA(tabname) = |PA{ <fs_zip_data>-name+2(4) }|.
DATA(csv_data_string) = cl_bcs_convert=>xstring_to_string( iv_xstr = lv_zip_content_xstring iv_cp = '4110' ).
SPLIT csv_data_string AT cl_abap_char_utilities=>cr_lf INTO TABLE t_csv. "AT "#"
zcl_process=>edit_and_upload( data = t_csv table = CONV #( tabname ) ).
ENDLOOP.
Code: Alles auswählen.
DATA: x40(1) TYPE x VALUE '40', " 0100 0000
x80(1) TYPE x VALUE '80', " 1000 0000
xc0(1) TYPE x VALUE 'C0'. " 1100 0000
...
DO n TIMES.
READ DATASET filename INTO line LENGTH sy-tfill.
IF sy-subrc NE 0. EXIT. ENDIF.
* Prüfe auf UTF-8
SUBTRACT 2 FROM sy-tfill.
DO sy-tfill TIMES.
IF line+sy-index(1) O xc0. " Zeichen 1 beginnt mit 11xxxxxx
ADD 1 TO sy-index.
IF line+sy-index(1) O x80 AND " Zeichen 2 beginnt mit 10xxxxxx
line+sy-index(1) Z x40.
MOVE 'U' TO mode.
EXIT.
ENDIF.
ENDIF.
ENDDO.
IF mode EQ 'U'. EXIT. ENDIF.
ENDDO.
Code: Alles auswählen.
WHEN 'ZIP'.
CREATE OBJECT lo_zip.
lo_zip->load( lv_xstring_buffer ).
LOOP AT lo_zip->files ASSIGNING FIELD-SYMBOL(<fs_zip_data>).
lo_zip->get( EXPORTING name = <fs_zip_data>-name IMPORTING content = lv_zip_content_xstring ).
DATA(tabname) = |PA{ <fs_zip_data>-name+2(4) }|.
DATA(csv_data_string) = cl_bcs_convert=>xstring_to_string( iv_xstr = lv_zip_content_xstring iv_cp = '4110' ).
DATA(lv_encoding_zip) = lo_check->check( EXPORTING i_path = lv_as_path i_string = csv_data_string ).
CASE lv_encoding_zip.
WHEN 'A'.
SPLIT csv_data_string AT cl_abap_char_utilities=>cr_lf INTO TABLE t_csv. "AT "#"
zcl_process=>edit_and_upload( data = t_csv table = CONV #( tabname ) ).
WHEN OTHERS.
MESSAGE: 'Die Codierung einer Datei ist nicht Korrekt.' TYPE 'I' DISPLAY LIKE 'E'.
ROLLBACK WORK.
LEAVE LIST-PROCESSING.
ENDCASE.
ENDLOOP.
Code: Alles auswählen.
METHOD check.
OPEN DATASET i_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
TRANSFER i_string(20) TO i_path.
CLOSE DATASET i_path.
TRY .
cl_abap_file_utilities=>check_utf8(
EXPORTING
file_name = i_path " Dateiname (wie bei OPEN DATASET)
max_kb = 8 " Obergrenze (Kilobyte)
IMPORTING
encoding = DATA(lv_encoding) " Encoding (Klassenkonstante)
).
CATCH cx_sy_file_open. "
CATCH cx_sy_file_authority. "
CATCH cx_sy_file_io. "
ENDTRY.
r_encoding = lv_encoding.
ENDMETHOD.