Code-Schnippsel: SPLIT & CONCATENATE für Byte

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
1 Beitrag • Seite 1 von 1
1 Beitrag Seite 1 von 1

Code-Schnippsel: SPLIT & CONCATENATE für Byte

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Nochmal dieselbe Routine, die ich bereits für den SPLIT & CONCATENATE für Text erstellt hab, diesmal aber für XSTRING & Co.
Hiermit kann man wie auch schon beim Split & Concatenate von Text, beliebige Bytefelder in Tabellen reinschreiben bzw. daraus lesen.
Zum Beispiel für den Export zum GUI oder zum Mail-Versand.
Der Einfachheit halber wiederum als Unter-Routine ;)

Code: Alles auswählen.

FORM split_byte
  USING    id_byte   TYPE xsequence
  CHANGING ct_table  TYPE table
           cd_length TYPE numeric. "Eigentlich optional

  DATA:
    ld_length   TYPE i,
    ld_byte     TYPE xstring.

  FIELD-SYMBOLS:
    <la_line>   TYPE any.

  REFRESH ct_table.

  APPEND INITIAL LINE TO ct_table ASSIGNING <la_line> 
  DESCRIBE FIELD <la_line> LENGTH ld_length IN BYTE MODE.
  ld_byte = id_byte.
  REFRESH ct_table.

  WHILE ld_byte IS NOT INITIAL.
    APPEND INITIAL LINE TO ct_table ASSIGNING <la_line>.
    <la_line> = ld_byte.
    SHIFT ld_text BY ld_length PLACES LEFT IN BYTE MODE.
  ENDWHILE.

  cd_length = xstrlen( id_byte ).
ENDFORM.

Code: Alles auswählen.

FORM concatenate_byte
  USING    ut_table  TYPE TABLE
  CHANGING cd_byte   TYPE xsequence
           cd_length TYPE any. "Eigentlich optional

  DATA:
    ld_lines     TYPE i,
    ld_length    TYPE i,
    ld_byte      TYPE xstring.

  FIELD-SYMBOLS:
    <la_line>    TYPE any.

  CLEAR cd_byte.
  CLEAR cd_length.

  ld_lines = lines( ut_table ).
  READ TABLE ut_table ASSIGNING <la_line> INDEX ld_lines.
  IF sy-subrc EQ 0.
    DESCRIBE FIELD <la_line> LENGTH ld_length IN BYTE MODE.
    ld_length = ( ld_length * ( ld_lines - 1 ) ) + xstrlen( <la_line> ).
  ENDIF.

  CONCATENATE LINES OF ut_table INTO ld_byte IN BYTE MODE.
* Ganz wichtig, damit der XString die richtige Länge hat
  cd_byte = ld_byte(ld_length).
  cd_length = ld_length.
ENDFORM.
Das Tolle daran ist, dass auch hierbei die richtige Länge für den Split bzw. Concatenate automatisch ermittelt wird 8)

Wenn man die Daten bereits als Tabelle hat und in eine andere mit unterschiedlicher Zeilenlänge umwandeln möchte, kann man dazu zuerst CONCATENATE und danach SPLIT verwenden.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
Andrzej

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Seite 1 von 1

Vergleichbare Themen

1
Antw.
5517
Views
Code-Schnippsel: SPLIT & CONCATENATE für Text
von a-dead-trousers » 06.09.2011 15:38 • Verfasst in Tips + Tricks & FAQs
1
Antw.
11920
Views
Code-Schnippsel: bel. Daten mittels RTTI bestimmen
von a-dead-trousers » 04.01.2012 09:36 • Verfasst in Tips + Tricks & FAQs
1
Antw.
8559
Views
Code-Schnippsel: Richtiger Umgang mit SM30/SM34 Zeitpunkten
von a-dead-trousers » 06.03.2012 13:50 • Verfasst in Tips + Tricks & FAQs
0
Antw.
1064
Views
2-Byte-Characters
von black_adept » 18.04.2005 14:57 • Verfasst in ABAP® für Anfänger
11
Antw.
6754
Views
Convert String to Byte etc...
von stony007_de » 19.11.2013 18:23 • Verfasst in ABAP Objects®

Über diesen Beitrag

a-dead-trousers
Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141