ABAP – Leerzeichen in String finden mit FIND

Wenn man alle Leerzeichen in einem String finden möchte – um zum Beispiel die Wörter in einem Satz zu bestimmen – dann steht man vor einem Problem. Die Anweisung FIND ALL OCCURRENCES OF <space oder ‚ ‚> IN <string> RESULTS <Tabelle mit Positionsangaben> führt zu einem Laufzeitfehler da space oder ‚ ‚ die Länge 0 hat und so eine Endlosschleife ausgelöst würde.
Man könnte nun die Leerzeichen maskieren – unter Verwendung von OVERLAY – oder auch den String aufsplitten, aber es geht noch viel einfacher.

Durch die Verwendung von ` `, des sogenannten „Backticks“ oder „Backquotes“ – die deutsche Bezeichnung wäre Gravis oder rückwärts geneigtes Hochkomma – kann ein Stringliteral definiert werden, das als Leerzeichen interpretiert wird.

REPORT  ztestfind.

DATA: testsatz(50) TYPE c VALUE ‚Das ist ein Test des Befehls FIND‘.
DATA: l_find_result TYPE TABLE OF match_result.
DATA: wa_find_result TYPE match_result.
DATA: len TYPE i.

len = strlen( testsatz ).
FIND ALL OCCURRENCES OF ` ` IN testsatz(len) RESULTS l_find_result.
LOOP AT l_find_result INTO wa_find_result.
  WRITE:/ wa_find_result-offset.
ENDLOOP.

In dem Beispiel wird zusätzlich auf die tatsächliche Länge des Strings abgefragt mit STRLEN da sonst natürlich auch die Position der abschließenden Leerzeichen ausgegeben wird.

Wollen Sie ab sofort kostenlos per Mail über neue Beiträge informiert werden? Dann tragen Sie sich in unsere Mailingliste ein.