Anwendungsgebiet: String-Funktionen
Die Funktion INDEX( ) zeigt die Position eines Suchstrings im Gesamtstring an. Der Gesamtstring kann von links nach rechts oder von rechts nach links durchsucht werden; der Ergebniswert bezieht sich immer auf den Anfang des Gesamtstrings.
Format
INDEX( ) |
STRING = string_ausdruck1 ,PATTERN = string_ausdruck2 ,DIRECTION = *FORWARD / *REVERSE ,BEGIN-COLUMN = 1 / arithm_ausdruck ,END-COLUMN = *LAST / arithm_ausdruck |
Ergebnistyp
INTEGER
Eingabeparameter
STRING = string_ausdruck1
Gesamtstring, der durchsucht wird.
PATTERN = string_ausdruck2
Suchstring, der im Gesamtstring gesucht wird.
DIRECTION =
Suchrichtung
DIRECTION = *FORWARD
Der Gesamtstring wird vorwärts, das heißt von links nach rechts, durchsucht.
DIRECTION = *REVERSE
Der Gesamtstring wird rückwärts, das heißt von rechts nach links, durchsucht.
BEGIN-COLUMN =
Die Suche wird vom Beginn des Gesamtstrings gesehen auf einen bestimmten Spaltenbereich beschränkt. Angegeben wird das erste Zeichen im Gesamtstring an, ab dem die Suche nach dem Suchstring beginnt.
Der durchsuchte String ist leer, wenn der Gesamtstring weniger Zeichen enthält als bei BEGIN-COLUMN angegeben sind.
BEGIN-COLUMN = 1
Die Suche beginnt ab Spalte 1, d.h. der Gesamtstring wird von Anfang an durchsucht.
BEGIN-COLUMN = arithm_ausdruck
Der Gesamtstring wird ab der angegebenen Spalte bzw. ab diesem Zeichen nach dem Suchstring durchsucht.
END-COLUMN =
Die Suche wird vom Ende des Gesamtstrings gesehen auf einen bestimmten Spaltenbereich beschränkt. Angegeben wird das letzte Zeichen im Gesamtstring an, das in die Suche einbezogen wird. Alle nachfolgenden Zeichen werden ignoriert.
END-COLUMN = *LAST
Der Gesamtstring wird bis zum Ende durchsucht.
END-COLUMN = arithm_ausdruck
Der Gesamtstring wird bis zu der angegebenen Spalte bzw. bis zu einschließlich diesem Zeichen nach dem Suchstring durchsucht.
Ergebnis
Integer
Anfangsposition des Suchstrings im Gesamtstring.
Ist der Suchstring im Gesamtstring mehrfach enthalten, zeigt „zahl“ bei Suchrichtung von links nach rechts das erste Auftreten des Suchstrings an, bei Suchrichtung von rechts nach links das Letzte.
0
Der Suchstring ist länger als der Gesamtstring, oder der Suchstring ist nicht im Gesamtstring enthalten.
Fehlermeldungen
SDP0413 NICHT ZULAESSIGE LAENGENANGABE SDP0493 BEGIN-INDEX, END-INDEX, BEGIN-COLUMN UND END-COLUMN MUESSEN GROESSER NULL SEIN SDP0498 BEGIN-COLUMN DARF NICHT GROESSER ALS END-COLUMN SEIN
Beispiel 1
/A = INDEX(STRING = 'ABCDE', PATTERN = 'C') /SHOW-VARIABLE A A = 3 /B = INDEX(STRING = 'ABCDEABC', PATTERN = 'AB') /SHOW-VARIABLE B B = 1 /C = INDEX(STRING = 'ABCDEABC', PATTERN = 'AB', DIRECTION = *REVERSE) /SHOW-VARIABLE C C = 6
Beispiel 2
/STRING = '1080:0:0:0:8:800:200C:417A' / /WRITE-TEXT '- FROM LEFT TO RIGHT -' /START = 1 /REPEAT / WRITE-TEXT '&(START) => &(SUBSTR( STRING, START ))' / START = INDEX( STRING, ':', *FORWARD, START, *LAST ) + 1 /UNTIL ( START == 1 ) / &* AT THE LAST LOOP ITERATION / &* INDEX DOES NOT FIND THE ':' / &* AND RETURNED 0 / &* 1 IS ADDED FROM THIS RETURNED VALUE. / /WRITE-TEXT '- FROM RIGHT TO LEFT -' /END = LENGTH( STRING ) /REPEAT / WRITE-TEXT '&(END) => &(SUBSTR( STRING, 1, END ))' / END = INDEX( STRING, ':', *REVERSE, 1, END ) - 1 /UNTIL ( END <= 0 ) / &* AT THE LAST LOOP ITERATION / &* INDEX DOES NOT FIND THE ':' / &* AND RETURNED 0. / &* 1 IS SUBTRACTED FROM THIS RETURNED VALUE. / /WRITE-TEXT '- SURROUNDING CUT -' /START = 1 /END = LENGTH( STRING ) /REPEAT / TEXT = '&(START):&(END) => ' // - / SUBSTR( STRING, START, END - START + 1 ) / WRITE-TEXT '&(TEXT)' / START = INDEX( STRING, ':', *FORWARD, START, END ) + 1 / END = INDEX( STRING, ':', *REVERSE, START, END ) - 1/UNTIL ( START > END )
Das Beispiel zeigt, wie ein String schrittweise nach Trennzeichen (hier Doppelpunkt) durchsucht und um die bereits durchsuchte Teilzeichenfolge reduziert werden kann. Die Suche und Reduzierung, die dabei in verschiedenen Richtungen (links nach rechts, rechts nach links und beidseitig) durchgeführt wird, liefert folgende Ausgabe:
- FROM LEFT TO RIGHT - 1 => 1080:0:0:8:800:200C:417A 6 => 0:0:0:8:800:200C:417A 8 => 0:0:8:800:200C:417A 10 => 0:8:800:200C:417A 12 => 8:800:200C:417A 14 => 800:200C:417A 18 => 200C:417A 23 => 417A - FROM RIGHT TO LEFT - 26 => 1080:0:0:0:8:800:200C:417A 21 => 1080:0:0:0:8:800:200C 16 => 1080:0:0:0:8:800 12 => 1080:0:0:0:8 10 => 1080:0:0:0 8 => 1080:0:0 6 => 1080:0 4 => 1080 - SURROUNDING CUT - 1:26 => 1080:0:0:0:8:800:200C:417A 6:21 => 0:0:0:8:800:200C 8:16 => 0:0:8:800 10:12 => 0:8