[ABAP] string (Text) nach xstring (Bytes) wandeln

Variante 1 (cl_abap_conv_out_ce)

DATA: lv_str TYPE string VALUE 'Teststring.'.
DATA: lv_xstr TYPE xstring.

* string (UTF-8) -> xstring (binary)
DATA(o_conv_w) = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
o_conv_w->write( data = lv_str ).
lv_xstr = o_conv_w->get_buffer( ).

WRITE: / lv_xstr.

Variante 2 (SCMS_STRING_TO_XSTRING)

DATA: lv_str TYPE string VALUE 'Teststring.'.
DATA: lv_xstr TYPE xstring.
  
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
  EXPORTING
    text   = lv_str
  IMPORTING
    buffer = lv_xstr.

WRITE: / lv_xstr.

Variante 3 (cl_proxy_service)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr_res) = cl_proxy_service=>cstring2xstring( lv_str ).
WRITE: / lv_xstr_res.

Variante 4 (cl_abap_codepage)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string -> xstring (binary) (UTF-8)
DATA(xstr) = cl_abap_codepage=>convert_to( source   = lv_str
                                           codepage = 'UTF-8' ).
WRITE: / xstr.

Variante 5 (cl_abap_message_digest)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr) = cl_abap_message_digest=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

Variante 6 (cl_abap_hmac)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string (4110 / UTF-8) -> xstring (binary)
DATA(lv_xstr) = cl_abap_hmac=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

Variante 7 (cl_clb_tools)

DATA: lv_str TYPE string VALUE 'Teststring.'.
* string -> xstring (binary) (UTF-8)
DATA(lv_xstr) = cl_clb_tools=>string_to_xstring( lv_str ).

WRITE: / lv_xstr.

[ABAP] Dateien auf dem Applikationsserver lesen / schreiben / löschen

* http://sap4tech.net/handling-files-on-application-server-in-sap/
* http://abap-blog.ru/files/fajlovyj-interfejs-operacii-s-fajlami/

DATA: it_mara TYPE TABLE OF mara.
DATA: wa_mara LIKE LINE OF it_mara.
DATA: lv_string TYPE string.

PARAMETERS: p_file TYPE string DEFAULT '/usr/sap/tmp/testmara.csv' .
PARAMETERS: p_mtart TYPE mara-mtart DEFAULT 'DIEN'.

START-OF-SELECTION.
* Daten lesen
  SELECT * FROM mara INTO TABLE @it_mara UP TO 50 ROWS WHERE mtart = @p_mtart.

TRY.
* Datei im Textmode zum Schreiben öffnen
* In einem Unicode-System entspricht die Angabe DEFAULT der Angabe UTF-8 und in einem Nicht-Unicode-System der Angabe NON-UNICODE
    OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING UTF-8 IGNORING CONVERSION ERRORS.

* Daten in die Datei schreiben
    LOOP AT it_mara INTO wa_mara .
      lv_string = |{ wa_mara-matnr };{ wa_mara-ersda };{ wa_mara-matkl }|.
      TRANSFER lv_string TO p_file.
    ENDLOOP.

* Datei schließen
    CLOSE DATASET p_file.

* Datei im Textmode zum lesen öffnen
* In einem Unicode-System entspricht die Angabe DEFAULT der Angabe UTF-8 und in einem Nicht-Unicode-System der Angabe NON-UNICODE
    OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING UTF-8 IGNORING CONVERSION ERRORS.

* Daten lesen bis Dateiende
    DO.
      READ DATASET p_file INTO lv_string.
      IF sy-subrc <> 0.
        EXIT.
      ELSE.
        WRITE: / lv_string.
      ENDIF.
    ENDDO.

* Datei schließen
    CLOSE DATASET p_file.

* Datei löschen
    DELETE DATASET p_file.
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.