Code-Schnippsel: SPLIT & CONCATENATE für Text

Hinweise, Tips und Tricks, FAQs - keine Anfragen!!
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Code-Schnippsel: SPLIT & CONCATENATE für Text

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Sodala, nachdem ich mir immer wieder die Finger wund schreibe, starte ich jetzt meine eigene kleine Code-Schnippsel-Sammlung im Forum 8)

Vor langer Zeit schon hab ich mich vom TEXT_SPLIT Funktionsbaustein verabschiedet, da dieser nicht mit Strings umgehen kann.
Hab mir dafür eine eigene SPLIT_TEXT-Methode (Klasse) gebaut die bislang immer zuverlässig funktioniert hat. Der Einfachheit halber habe ich sie hier als Unter-Routine rauskopiert ;)

Code: Alles auswählen.

form split_text 
  using    ud_text   TYPE csequence
  changing ct_table  TYPE table
           cd_length TYPE any. "Eigentlich optional

  DATA:
    ld_length   TYPE i,
    ld_text     TYPE string.

  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 CHARACTER MODE.
  ld_text = ud_text.
  REFRESH ct_table.

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

  cd_length = strlen( ud_text ).
ENDFORM.

Code: Alles auswählen.

FORM concatenate_text
  USING    ut_table  TYPE TABLE
  CHANGING cd_text   TYPE csequence
           cd_length TYPE any. "Eigentlich optional

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

  FIELD-SYMBOLS:
    <la_line>    TYPE any.

  CLEAR cd_text.
  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 CHARACTER MODE.
    ld_length = ( ld_length * ( ld_lines - 1 ) ) + strlen( <la_line> ).
  ENDIF.

  CONCATENATE LINES OF ut_table INTO ld_text IN CHARACTER MODE.
* Ganz wichtig, damit der String die richtige Länge hat
  cd_text = ld_text(ld_length).
  cd_length = ld_length.
ENDFORM.
Das Tolle daran ist, dass die richtige Länge für den Split automatisch ermittelt wird 8)

EDIT: Hab das ganze jetzt um die Längenermittlung und ein CONCATENATE ergänzt.
Wenn man die Daten bereits als Tabelle hat und in eine andere mit unterschiedlicher Zeilenlänge umwandeln möchte, kann man dann zuerst CONCATENATE und danach SPLIT verwenden.
Zuletzt geändert von a-dead-trousers am 14.03.2013 08:12, insgesamt 6-mal geändert.

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

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


Re: Code-Schnippsel: TEXT_SPLIT für Strings

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
sorry mein fehler ..... hab garnicht geshen das es unter tips und tricks stand.......
<:: XING-Gruppe Tricktresor::>

Seite 1 von 1

Vergleichbare Themen

0
Antw.
6391
Views
1
Antw.
12318
Views
Code-Schnippsel: bel. Daten mittels RTTI bestimmen
von a-dead-trousers » 04.01.2012 09:36 • Verfasst in Tips + Tricks & FAQs
1
Antw.
8916
Views
Code-Schnippsel: Richtiger Umgang mit SM30/SM34 Zeitpunkten
von a-dead-trousers » 06.03.2012 13:50 • Verfasst in Tips + Tricks & FAQs
2
Antw.
2061
Views
Text-Split
von honeyjam » 20.12.2011 15:17 • Verfasst in ABAP® für Anfänger
5
Antw.
1431
Views
Split
von NLengner » 25.07.2019 11:16 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 9 Stunden von DeathAndPain gelöst 22 / 2988
Daten an Tabelle binden
vor 14 Stunden von Lukas Sanders 2 / 976
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 541

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.

Aktuelle Forenbeiträge

Dialog-Container mit Toolbar/Status
vor 9 Stunden von DeathAndPain gelöst 22 / 2988
Daten an Tabelle binden
vor 14 Stunden von Lukas Sanders 2 / 976
Zeilenumbrüche ersetzen
vor 2 Tagen von ralf.wenzel 6 / 541

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2554
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9135