Tabellenzeilen nach Zeichenketten durchsuchen 

Um die Zeilen einer Index-Tabelle nach einer bestimmten Zeichenkette zu durchsuchen, verwendet man die Anweisung:

SEARCH <itab> FOR <str> <options>.

Diese Anweisung durchsucht die Zeilen der internen Tabelle <itab> nach der Zeichenkette in <str>. Falls die Suche erfolgreich ist, wird SY-SUBRC auf 0 und SY-TABIX auf den Index der Tabellenzeile gesetzt, in der die Zeichenkette gefunden wurde. SY-FDPOS enthält den Offset der Zeichenkette in der Tabellenzeile. Andernfalls wird SY-SUBRC auf 4 gesetzt.

Die Anweisung behandelt alle Tabellenzeilen unabhängig von ihrem tatsächlichen Typ als Felder des Typs C. Es werden keine Konvertierungen durchgeführt. Der Suchstring <str> kann die gleiche Form haben, wie beim normalen Zeichenketten suchen in Feldern.

Die verschiedenen Optionen (<options>) für die Suche in der Tabelle <itab> sind:

Die Tabelle <itab> wird nach einem Wort durchsucht, das die Zeichenfolge in <str> enthält. Die Zeichen können durch andere Zeichen getrennt sein. Das erste Zeichen des Wortes und im String <str> müssen identisch sein.

Die Tabelle <itab> wird ab Zeile <lin 1 > nach <str> durchsucht, wobei <lin 1 > eine Variable sein kann.

Die Tabelle <itab> wird bis Zeile <lin 2 > nach <str> durchsucht, wobei <lin 2 > eine Variable sein kann.

Wenn der Suchstring gefunden wird, werden alle Zeichen des Suchstrings (und alle dazwischen liegenden Zeichen bei Verwendung von ABBREVIATED) in Großbuchstaben umgesetzt.

Diese Anweisung funktioniert nur mit Index-Tabellen. Sie hat keine Entsprechung für Hash-Tabellen.

REPORT demo_int_tables_search_index.

DATA: BEGIN OF line,
        index   TYPE i,
        text(8) TYPE c,
      END OF line.

DATA itab LIKE SORTED TABLE OF line WITH UNIQUE KEY index.

DATA num(2) TYPE n.

DO 10 TIMES.
  line-index = sy-index.
  num = sy-index.
  CONCATENATE 'string' num INTO line-text.
  APPEND line TO itab.
ENDDO.

SEARCH itab FOR 'string05' AND MARK.

WRITE: / '''string05'' found at line', (1) sy-tabix,
         'with offset', (1) sy-fdpos.

SKIP.

READ TABLE itab INTO line INDEX sy-tabix.
WRITE: / line-index, line-text.

Die Listenausgabe ist:

'string05' found at line 5 with offset 4

         5 STRING05

Der Offset der gefundenen Zeichenkette wird durch die Breite der ersten Tabellenspalte vom Typ I der Länge 4 bestimmt. Die Option AND MARK verändert den Tabelleninhalt der entsprechenden Zeile.