[ABAP] RegEx: Strings ersetzen

* Platzhalter: Zeichenkette, die ersetzt werden soll
DATA(lv_placeholder) = |<placeholder>|.
* Replacement: Zeichenkette, die anstelle des Platzhalters eingesetzt wird
DATA(lv_replacement) = | und |.

* Alle Vorkommen des Platzhalters im String finden
DATA(matcher) = cl_abap_matcher=>create( pattern     = lv_placeholder
                                         text        = 'Ich fahre gerne Auto<placeholder>Fahrrad<placeholder>Straßenbahn.'
                                         ignore_case = abap_true ).

* Alle Platzhalter mit Replacement ersetzen
IF matcher->replace_all( lv_replacement ) > 0.
  WRITE: / matcher->text.
ELSE.
  WRITE: / |Zeichenkette '{ lv_placeholder }' nicht im String vorhanden.|.
ENDIF.

[ABAP] String nach TLINE konvertieren

* https://www.tricktresor.de/blog/textstream-konvertieren/
DATA(lv_string) = 'AAAA' && cl_abap_char_utilities=>newline && 'BBBB' && cl_abap_char_utilities=>cr_lf && 'CCCC'.
DATA(it_strings) = VALUE string_table( ( lv_string ) ).

DATA: it_tline TYPE tline_t.

* Stringtabelle -> TLINE-Tabelle
* SAPscript: Konvertieung Textstream nach ITF für TextEditControl
CALL FUNCTION 'CONVERT_STREAM_TO_ITF_TEXT'
  EXPORTING
    stream_lines = it_strings
    lf           = abap_true
  TABLES
    itf_text     = it_tline.

cl_demo_output=>write_data( it_strings ).
cl_demo_output=>write_data( it_tline ).
cl_demo_output=>display( ).

[ABAP] TLINE nach String konvertieren

Variante 1 (CONVERT_ITF_TO_STREAM_TEXT)

* https://www.tricktresor.de/blog/textstream-konvertieren/
DATA(it_tline) = VALUE tline_t( ( tdformat = '*' tdline = 'AAAA' )
                                ( tdformat = '*' tdline = 'BBBB' )
                                ( tdformat = '*' tdline = 'CCCC' ) ).

DATA(it_strings) = VALUE string_table( ).

* TLINE-Tabelle -> Stringtabelle
* SAPscript: Konvertierung ITF nach Textstream für TextEditControl
CALL FUNCTION 'CONVERT_ITF_TO_STREAM_TEXT'
  EXPORTING
    lf           = abap_true
  IMPORTING
    stream_lines = it_strings
  TABLES
    itf_text     = it_tline.

cl_demo_output=>write_data( it_tline ).
cl_demo_output=>write_data( it_strings ).
cl_demo_output=>display( ).

Variante 2 (IDMX_DI_TLINE_INTO_STRING)

DATA(it_tline) = VALUE tline_t( ( tdformat = '*' tdline = 'AAAA' )
                                ( tdformat = '*' tdline = 'BBBB' )
                                ( tdformat = '*' tdline = 'CCCC' ) ).

DATA(lv_string) = ||.

* TLINE-Tabelle -> String
* Converts ITF text into a string
* ruft implizit CONVERT_ITF_TO_STREAM_TEXT
CALL FUNCTION 'IDMX_DI_TLINE_INTO_STRING'
  EXPORTING
    it_tline       = it_tline
  IMPORTING
    ev_text_string = lv_string.

cl_demo_output=>write_data( it_tline ).
cl_demo_output=>write_data( lv_string ).
cl_demo_output=>display( ).

[ABAP] Covers Pattern: Testen, ob ein String eine bestimmte Pattern enthält (Vergleichsoperator CP für zeichenartige Datentypen)

Variante 1 (Testen, ob ein String (Dateiname) auf einen bestimmten String (Dateiendung) endet (endswith))

* Dateiname
DATA(lv_filename) = |c:\\test\\file.txt|.
* Dateiendung
DATA(lv_fileext) = |txt|.

* prüft, ob lv_filename auf .lv_fileext endet
* '*' ist dabei der Platzhalter für eine bel. Anzahl Zeichen incl. Leerzeichen
IF NOT ( lv_filename CP |*.{ lv_fileext }| ).
  WRITE: / |'{ lv_filename }' endet nicht auf '{ lv_fileext }'|.
ELSE.
  WRITE: / |'{ lv_filename }' endet auf '{ lv_fileext }'|.
ENDIF.

Variante 2: (Prüft, Pattern in einem String vorkommt)

* String mit <text>-Tags
PARAMETERS: p_str type string DEFAULT '<text>ABC</text>'.
* Pattern, die auf Öffnen/Schließen-Tags prüft
DATA(lv_pattern) = |<*>*</*>|.

* prüft, Pattern in einem String vorkommt
* '*' ist dabei der Platzhalter für eine bel. Anzahl Zeichen incl. Leerzeichen
IF NOT ( p_str CP lv_pattern ).
  WRITE: / |String beinhaltet nicht die Pattern ({ lv_pattern }).|.
ELSE.
  WRITE: / |String beinhaltet die Pattern ({ lv_pattern }).|.
ENDIF.

[ABAP] String -> JSON

DATA: text TYPE string VALUE 'Hello world!'.

* ABAP (string) -> JSON
DATA(o_writer_json) = cl_sxml_string_writer=>create( type = if_sxml=>co_xt_json ).
CALL TRANSFORMATION id SOURCE text = text RESULT XML o_writer_json.
DATA(json) = cl_abap_codepage=>convert_from( o_writer_json->get_output( ) ).

WRITE: / json.

[ABAP] XML -> String

DATA: xml TYPE string VALUE '<?xml version="1.0" encoding="utf-8"?><asx:abap version="1.0" xmlns:asx="http://www.sap.com/abapxml"><asx:values><TEXT>Hello world!</TEXT></asx:values></asx:abap>'.
DATA: text TYPE string.

* XML -> ABAP (string)
CALL TRANSFORMATION id SOURCE XML xml RESULT text = text.

WRITE: / text.

[ABAP] itab -> JSON (trex)

TYPES: BEGIN OF s_person,
         name  TYPE string,
         title TYPE string,
         age   TYPE i,
       END OF s_person.

TYPES: t_person TYPE STANDARD TABLE OF s_person WITH DEFAULT KEY.

DATA(it_persons) = VALUE t_person( ( name = 'Horst' title = 'Herr' age = 30 )
                                   ( name = 'Jutta' title = 'Frau' age = 35 )
                                   ( name = 'Ingo' title = 'Herr' age = 31 ) ).

* ABAP (iTab) -> JSON (trex)
DATA(o_trex) = NEW cl_trex_json_serializer( it_persons ).
o_trex->serialize( ).

WRITE: / o_trex->get_data( ).