CL_ABAP_CONV_OUT_CE - Codepage- und Endian Konvertierung (Systemformat -> Extern)

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Funktionalität

Instanzen der Klasse CL_ABAP_CONV_OUT_CE ermöglichen die Konvertierung von ABAP Datenobjekten in Binärdaten. (D.h. Daten im Systemformat werden ausgegeben in ein Fremdformat.)

Unterstützt werden die Konvertierung von Zeichensätzen (für Textdaten) und die Konvertierung der Bytereihenfolge (für numerische Daten).

Ferner gibt es statische Methoden, um zu einem Zeichen in der aktuellen Codepage den zugehörigen hexadezimalen oder dezimalen Wert in der Unicode Codepage zu bestimmen. Dies sind die MethodenCL_ABAP_CONV_OUT_CE=>UCCP undCL_ABAP_CONV_OUT_CE=>UCCPI.

Beziehungen

CL_ABAP_CONV_IN_CE
Konvertierung von Binärdaten in ABAP Datenobjekte.
CL_ABAP_CONV_X2X_CE
Konvertierung von ABAP Datenobjekten zwischen zwei externen Binärformaten.
CL_ABAP_CHAR_UTILITIES
Diverse Attribute und Methoden zu Zeichensätzen und Bytereihenfolge.
CL_NLS_STRUC_CONTAINER
Korrektur der Ausrichtung von Strukturen in Containern vom Typ C (oder STRING). Diese Korrektur istnotwendig, wenn ostasiatische Zeichen ("full-width" Zeichen in Chinesisch, Japanisch und Koreanisch)von einem nicht-Unicode-System in ein Unicode-System oder umgekehrt übertragen werden. Die Korrektur ist nicht notwendig, wenn die Methode CONVERT_STRUC dieser Klasse verwendet wird.

Beispiel

Im folgenden Beispiel werden Text aus der Systemcodepage nach UTF-8 und Zahlen aus dem Systemformat in die little-endian Darstellung konvertiert.

  DATA:

    text(4) TYPE c VALUE 'ABC',

    int TYPE i VALUE 258.

  DATA:

    buffer1 TYPE xstring,

    buffer2 TYPE xstring,

    conv TYPE REF TO cl_abap_conv_out_ce.

  conv = cl_abap_conv_out_ce=>create(

           encoding = 'UTF-8'

           endian = 'L' ).

  conv->convert( EXPORTING data = text

                 IMPORTING buffer = buffer1 ).

  conv->convert( EXPORTING data = int

                 IMPORTING buffer = buffer2 ).

Hier wird zunächst durch Aufruf der Methode CREATEeine Konvertiererinstanz angelegt. Als Parameter können die Ziel-Codepage, die im Ausgabepufferzu verwendende Bytereihenfolge und die Art der Fehlerbehandlung spezifiziert werden. Der Parameter endianist nur für die Typen DECFLOAT34, DECFLOAT16, F, I und INT2 von Bedeutung.

Nach den Aufrufen von CONVERTenthält die Variable buffer1 die 4 Bytes 41424320, was die (hexadezimale) UTF-8-Darstellung des Textes"ABC" ist. Die Variable buffer2 enthält die 4 Bytes 02010000, die den Wert 258 im little-endian Format repräsentieren.

Details sind in der Dokumentation der jeweiligen Methoden erklärt.

Das folgende Beispiel zeigt, wie Strukturen konvertiert werden können.

  DATA:

    BEGIN OF struc,

      text(5) TYPE c,

      int TYPE i,

    END OF struc.

  DATA:

    buffer TYPE xstring,

    conv TYPE REF TO cl_abap_conv_out_ce,

    view TYPE REF TO cl_abap_view_offlen.

  view = cl_abap_view_offlen=>create_legacy_view( struc ).

  conv = cl_abap_conv_out_ce=>create(

                              encoding = '0120'

                              endian = 'B' ).

  struc-text = 'Abc12'.

  struc-int  = 65538.

  conv->convert_struc( EXPORTING data = struc

                                 view = view

                       IMPORTING buffer = buffer ).

Hier wird mit der Methode CREATE_LEGACY_VIEW das in einem Nicht-Unicode-System üblicheLayout bestimmt. (Um das in einem Unicode-System übliche Layout zu bestimmen, gibt es die MethodeCREATE_UNICODE16_VIEW.) Als Ziel-Codepage wird '0120' angegeben (SAP-ZeichensatznummerfÜr EBCDIC-Latin-1.) Am Schluß enthält buffer(5) die Bytes C18283F1F2 (für "Abc12") und buffer+8(4) die Bytes 00010002 (für 65538).

Die Klasse CL_ABAP_CONV_OUT_CE besitzt einige weitere Methoden, die ein Stream-orientiertes Modellimplementieren: Die ABAP Datenobjekte werden sequentiell in einen binären Ausgabepuffer geschrieben. Diese Methoden werden wie folgt verwendet:

CL_ABAP_CONV_OUT_CE=>CREATE
Siehe oben.
WRITE
Daten werden konvertiert. Aufeinanderfolgende Aufrufe dieser Methode ermöglichen das sequentielle Anfügen von Daten an das Ende des Ausgabepuffers.
GET_BUFFER
Holen des Ausgabepuffers (Binärstrings) zur weiteren Verarbeitung (Schreiben in eine Datei, Versenden per RFC, o.ä.).
RESET
Einzelne Attribute der Konvertiererinstanz können neu gesetzt werden. (Diese Methode ist insbesondere zum Löschen des Ausgabepuffers unter Beibehaltung der übrigen Attribute gedacht.)

DATA:

  text(100) TYPE C VALUE 'ABC',

  int TYPE I VALUE 258.

DATA:

  buffer TYPE XSTRING,

  conv TYPE REF TO cl_abap_conv_out_ce.

conv = cl_abap_conv_out_ce=>create(

         encoding = 'UTF-8'

         endian = 'L'

       ).

CALL METHOD conv->write( data = text  n = 4 ).

CALL METHOD conv->write( data = int ).

buffer = conv->get_buffer( ).

Die Variable buffer enthält nun den Hexadezimalstring "4142432002010000". Dieser setzt sich zusammen aus:

  • 4 Bytes (hexadezimal "41424320"), welche den String "ABC" in UTF-8 repräsentieren.
  • 4 Bytes (hexadezimal "02010000"), welche den Wert 258 im little-endian Format repräsentieren.

Wenn die gewünschte Bytereihenfolge in dem alten vonTRANSLATE ... NUMBER FORMAT erwarteten Format (als N(4) Wert) vorliegt, kann wie folgt vorgegangen werden:

TYPE-POOLS: ABAP.

CLASS cl_abap_char_utilities DEFINITION LOAD.

DATA:

  number_format(4) TYPE N VALUE '0101'.

DATA:

  endian TYPE ABAP_ENDIAN,

  conv TYPE REF TO cl_abap_conv_out_ce.

endian = cl_abap_char_utilities=>number_format_to_endian(

           number_format

         ).

conv = cl_abap_conv_out_ce=>create(

         encoding = 'UTF-8'

         endian = endian

       ).

Hinweise

Details sind in der Dokumentation der jeweiligen Methoden erklärt.

Weiterführende Informationen



SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 12316 Date: 20120527 Time: 082853     triton ( 200 ms )