ABAPFIND_PATTERN - FIND PATTERN

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   RFUMSV00 - Advance Return for Tax on Sales/Purchases  
Diese Dokumentation steht unter dem Copyright der SAP AG.

FIND - pattern

Kurzreferenz



Syntax

...  {[SUBSTRING] substring} | {REGEX regex} ... .

Varianten:

1. ... [SUBSTRING] substring.

2. ... REGEX regex.

Wirkung

Definition eines Suchmusters für die Anweisungen FINDund FIND IN TABLE.Es kann entweder nach einer Unterfolge substring oder nach einem regulären Ausdruck regex gesucht werden.

Hinweis

Die Anweisungen REPLACEund REPLACE IN TABLE verwenden das gleiche Suchmuster.

Variante 1

... [SUBSTRING] substring.


Wirkung

In dieser Variante wird nach dem exakten Vorkommen einer in einem zeichen- bzw. byteartigen Operanden substring angegebenen Unterfolge gesucht. Bei substring handelt es sich um einezeichenartige Ausdrucksposition.Die Angabe des Wortes SUBSTRING ist optional.

Wenn substring entweder ein leerer String ist oder vom Typ c, d, n odert und nur Leerzeichen enthält, wird eine leere Unterfolge gesucht. Dies ist nur beim Suchennach dem ersten Vorkommen möglich und die leere Unterfolge wird immer vor dem ersten Zeichenbzw. Byte und gefunden. Bei der Zeichenkettenverarbeitung werden bei Datenobjekten substring fester Länge die schließenden Leerzeichen nicht berücksichtigt.

Hinweis

Sollen schließende Leerzeichen in der Unterfolge berücksichtigt werden, muss substring vom Datentyp string sein.

Beispiel

Suche sämtlicher Vorkommen der Folge "now" in einem Textstringliteral. Die Offsets 11 und 24 der beiden Fundstellen werden ausgegeben.

DATA: patt       TYPE string VALUE `now`,
      text       TYPE string,
      result_tab TYPE match_result_tab.

FIELD-SYMBOLS <match> LIKE LINE OF result_tab.


FIND ALL OCCURRENCES OF patt IN
     `Everybody knows this is nowhere`
     RESULTS result_tab.

LOOP AT result_tab ASSIGNING <match>.
  WRITE: / <match>-offset, <match>-length.
ENDLOOP.

Beispiel

Suche sämtlicher Vorkommen der Folge "now" in einem Textstringliteral mit Hilfe einer WHILE-Schleife.Nach jeder erfolgreichen Suche wird der Suchbereich neu hinter der Fundstelle definiert. Auf diese Art konnten auch vor Release 7.0 alle Vorkommen des Suchmusters gefunden werden.

DATA: patt TYPE string VALUE `now`,
      text TYPE string,
      off  TYPE i,
      moff TYPE i,
      mlen TYPE i.

off = 0.
WHILE sy-subrc = 0.
  FIND patt IN SECTION OFFSET off OF
       `Everybody knows this is nowhere`
       MATCH OFFSET moff
       MATCH LENGTH mlen.
  IF sy-subrc = 0.
    WRITE / moff.
    off = moff + mlen.
  ENDIF.
ENDWHILE.

Variante 2

... REGEX regex.


Wirkung

In dieser Variante wird nach einer Übereinstimmung mit einem in regex angegebenen regulärenAusdruck gesucht. Für regex kann entweder ein zeichenartiger Operand, der bei Ausführung der Anweisung einengültigen regulären Ausdruck enthält, oder eine Objektreferenzvariable, die auf eine Instanz der KlasseCL_ABAP_REGEX zeigt, angegeben werden. Bei regex handelt es sich um einezeichenartige Ausdrucksposition

Bei der Suche nach einem regulären Ausdruck können spezielleSuchmuster angegebenwerden, die u.a. Vorausschau-Bedingungen erlauben. Die Fundstellen werden nach der "leftmost-longest"-Regelermittelt. Unter allen möglichen Übereinstimmungen zwischen regulärem Ausdruckund zu durchsuchender Zeichenfolge wird die am weitesten links beginnende Unterfolge gewählt.Gibt es mehrere Übereinstimmungen an dieser Position, so wird die längste dieser Unterfolgen gewählt.

Eine leere Zeichenfolge in regex ist kein gültiger regulärer Ausdruck und führtzu einer Ausnahme. Eine leere Zeichenfolge liegt vor, wenn regex entweder ein leerer String ist oder vom Typ c, d, n oder t und nur Leerzeichen enthält.

Hinweise

  • Es gibt nicht-leere reguläre Ausdrücke wie a*, mit denen nach leeren Zeichenfolgengesucht wird. Dies ist bei der Suche nach dem ersten und nach allen Vorkommen möglich. Die entsprechendenleeren Unterfolgen werden vor dem ersten Zeichen, zwischen allen Zeichen und hinter dem letzten Zeichen des Suchbereichs gefunden. Eine solche Suche ist immer erfolgreich.
  • Ein regulärer Ausdruck kann zwar syntaktisch korrekt, aber zu komplex für die Ausführung der Anweisung FIND sein, was zu einer behandelbaren Ausnahme der KlasseCX_SY_REGEX_TOO_COMPLEX führt. SieheAusnahmen in regulären Ausdrücken.


Beispiel

Die folgende Suche findet die Unterfolge 'ababb' ab Offset 3. Die ebenfalls übereinstimmende Unterfolge 'babboo' ab Offset 4 wird nach der "leftmost-longest"-Regel nicht gefunden.

DATA: moff TYPE i,
      mlen TYPE i.

FIND REGEX 'a.|[ab]+|b.*' IN 'oooababboo'
     MATCH OFFSET moff
     MATCH LENGTH mlen.


RFUMSV00 - Advance Return for Tax on Sales/Purchases   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.


Length: 7584 Date: 20120526 Time: 200855     triton ( 255 ms )