Anfang des Inhaltsbereichs

Zeichenketten suchen Dokument im Navigationsbaum lokalisieren

Die Anweisung SEARCH durchsucht eine Zeichenkette nach einem bestimmten Muster:

SEARCH <c> FOR <str> <options>.

Das Feld <c> wird nach der Zeichenkette in <str> durchsucht. Falls die Suche erfolgreich ist, ist der Rückgabewert 0, und SY-FDPOS wird auf den Offset der Zeichenkette im Feld <c> gesetzt. Anderenfalls wird SY-SUBRC auf 4 gesetzt.

Der Suchstring <str> kann folgende Form haben:

<str>

Funktion

<muster>

<muster> (eine beliebige Zeichenfolge) wird gesucht. Leerzeichen am Ende werden ignoriert.

.<muster>.

<muster> wird gesucht. Leerzeichen am Ende werden nicht ignoriert.

*<muster>

Ein Wort wird gesucht, das mit <muster> endet.

<muster>*

Ein Wort wird gesucht, das mit <muster> beginnt.

Als Trennzeichen zwischen Wörtern gelten Leerzeichen, Kommata, Punkte, Semikola, Doppelpunkte, Fragezeichen, Ausrufezeichen, Klammern, Schrägstriche, Plus - und Gleichheitszeichen.

Die verschiedenen Optionen <options> der Anweisung SEARCH FOR sind:

Feld <c> 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.

Das Feld <c> wird ab Position <n1> nach <str> durchsucht. Das Ergebnis SY-FDPOS bezieht sich auf den Offset zu <n1>, nicht auf den Anfang des Feldes.

Feld <c> wird bis Position <n2> nach <str> durchsucht.

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

Beispiel

DATA string(30) TYPE c VALUE 'This is a little sentence.'.

WRITE: / 'Searched', 'SY-SUBRC ', 'SY-FDPOS'.
ULINE /1(26).

SEARCH string FOR 'X'.
WRITE: / 'X', sy-subrc UNDER 'SY-SUBRC',
               sy-fdpos UNDER 'SY-FDPOS'

SEARCH string FOR 'itt   '.
WRITE: / 'itt   ', sy-subrc UNDER 'SY-SUBRC',
                   sy-fdpos UNDER 'SY-FDPOS'

SEARCH string FOR '.e .'.
WRITE: / '.e .', sy-subrc UNDER 'SY-SUBRC',
                  sy-fdpos UNDER 'SY-FDPOS'.

SEARCH string FOR '*e'.
WRITE: / '*e ', sy-subrc UNDER 'SY-SUBRC',
                sy-fdpos UNDER 'SY-FDPOS'.

SEARCH string FOR 's*'.
WRITE: / 's* ', sy-subrc UNDER 'SY-SUBRC',
                sy-fdpos UNDER 'SY-FDPOS'.

Listenausgabe:

SEARCHED SY-SUBRC SY-FDPOS

X            4        0

itt          0       11

.e .         0       15

*e           0       10

s*           0       17

Beispiel

DATA: TYPE c (30) TYPE c VALUE 'This is a fast first example.',
      pos TYPE i,
      off TYPE i.

WRITE / string.

SEARCH string FOR 'ft' ABBREVIATED.
WRITE: / 'SY-FDPOS:', sy-fdpos.

pos = sy-fdpos + 2.
SEARCH string FOR 'ft' ABBREVIATED STARTING AT pos AND MARK.
WRITE / string.
WRITE: / 'SY-FDPOS:', sy-fdpos.
off = pos + sy-fdpos -1.
WRITE: / 'Off:', off.

Listenausgabe:

This is a fast first example.

SY-FDPOS:    10

This is a fast FIRST example.

SY-FDPOS:    4

Off:        15

Es ist hier zu beachten, daß zum Offset SY-FDPOS 2 addiert werden muß und die Suche an dieser Position POS begonnen werden muß, um nach Auffinden des Wortes 'fast' das zweite Wort zu finden, das 'ft' enthält. Andernfalls würde das Wort 'fast' erneut gefunden. Der Offset von 'first' bezogen auf den Anfang des Feldes STRING wird aufgrund von POS und SY-FDPOS errechnet.

Ende des Inhaltsbereichs