Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

SEARCH-LIST-INDEX( ) String in einer Liste suchen

&pagelevel(3)&pagelevel

Anwendungsgebiet: Stringfunktionen

Die Funktion SEARCH-LIST-INDEX( ) sucht in einer Listenvariablen einen String oder einen nach POSIX-Regeln gebildeten regulären Ausdruck. Der Returnwert gibt die Nummer des ersten Listenelements an, das diesen Ausdruck bzw. diesen Suchstring enthält.

Normalerweise - wenn man eine solche Operation durch eine Schleife mit der Funktion INDEX ausführen lässt - benötigt man dafür sehr viel Zeit. Durch die Einführung dieser vordefinierten Funktion wird die Ausführungszeit wesentlich reduziert, da die Suche in einem Schritt ausgeführt wird.

Format

SEARCH-LIST-INDEX( )

LIST-VARIABLE-NAME = string_ausdruck1

,PATTERN = string_ausdruck2

,BEGIN-INDEX = 1 / arithm_ausdruck

,END-INDEX = *LAST / arithm_ausdruck

,BEGIN-COLUMN = 1 / arithm_ausdruck

,END-COLUMN = *LAST / arithm_ausdruck

,PATTERN-TYPE = *STRING / *REGULAR-EXPRESSION

,DIRECTION = *FORWARD / *REVERSE

Ergebnistyp

INTEGER

Eingabeparameter

LIST-VARIABLE-NAME= string_ausdruck1
Bezeichnet die Variable, die aus einer Liste von Strings besteht.

PATTERN = string_ausdruck2
Bezeichnet den Suchstring oder regulären Ausdruck, nach dem sequenziell innerhalb der Listenvariablen gesucht wird, die in LIST-VARIABLE-NAME angegeben ist.

BEGIN-INDEX =
Bezeichnet das erste Listenelement bzw. den Index, bei dem die Suche gestartet wird. Listenelemente mit einem kleineren Index werden nicht geprüft. Ist der angegebene Index größer als die Anzahl der Elemente, wird immer „0“ zurückgegeben; d.h. es wird „nichts gefunden“ zurückgemeldet.

BEGIN-INDEX = 1
Die Suche beginnt beim Listenelement 1, d.h. die Liste wird von Beginn an durchsucht.

BEGIN-INDEX = arithm_ausdruck
Ab dem angegebenen Listenelement beginnt die Suche.

END-INDEX =
Bezeichnet das letzte Listenelement bzw. den Index, bis zu dem gesucht wird.
Ist einschließlich diesem Index nichts gefunden worden, wird immer „0“ zurückgegeben.

END-INDEX = *LAST
Die Suche endet beim letzten Listenelement.

END-INDEX = arithm_ausdruck
Die Suche endet mit dem angegebenen Listenelement.

BEGIN-COLUMN =
Die Suche wird vom Beginn auf einen bestimmten Spaltenbereich beschränkt. BEGIN-COLUMN zeigt das erste Zeichen im String an, das als Suchstart im jeweiligen Element betrachtet wird, um den in PATTERN angegeben Suchstring zu finden.
Wenn PATTERN-TYPE = *REGULAR-EXPRESSION ist, gehört das Zeichen „^“ am Anfang des gesuchten Strings nicht mehr zum eigentlichen Suchstring, sondern trifft genau die Position vor dem in BEGIN-COLUMN angegebenen Wert.
Der durchsuchte String ist leer, wenn das Listenelement weniger Zeichen enthält als bei BEGIN-COLUMN angegeben sind.

BEGIN-COLUMN = 1
Die Suche beginnt ab Spalte 1, d.h. es wird das gesamte Listenelement durchsucht.

BEGIN-COLUMN = arithm_ausdruck
Ab der angegebenen Spalte bzw. ab diesem Zeichen wird in einem Listenelement nach dem Suchstring gesucht.

END-COLUMN =
Die Suche wird vom Ende gesehen auf einen bestimmten Spaltenbereich beschränkt. END-COLUMN zeigt dasjenige Zeichen im String an, das als Suchende im jeweiligen Element betrachtet wird, um den in PATTERN angegeben Suchstring zu finden. Die Zeichen des Listenelements nach der in END-COLUMN bezeichneten Position werden bei der Suche nicht berücksichtigt.

Wenn PATTERN-TYPE = *REGULAR-EXPRESSION ist, trifft das Zeichen „$“ am Ende des gesuchten Strings genau die Position nach dem in END-COLUMN angegebenen Wert (das bedeutet: dieses Zeichen gehört nicht mehr zum eigentlichen Suchstring), oder es trifft das Ende des Listenelements, wenn das Listenelement weniger Zeichen enthält, als bei END-COLUMN angegeben sind.

END-COLUMN = *LAST
Die Suche endet mit dem Ende des Strings bzw. mit dem Ende des Listenelements.

END-COLUMN = arithm_ausdruck
Ab der angegebenen Spalte bzw. ab diesem Zeichen wird in einem Listenelement nach dem Suchstring nicht mehr gesucht.

PATTERN-TYPE =
Bezeichnet den Datentyp des Suchstrings oder gesuchten regulären Ausdrucks.

PATTERN-TYPE = *STRING
Der Datentyp ist STRING.

PATTERN-TYPE = *REGULAR-EXPRESSION
Der Datentyp entspricht dem eines nach POSIX-Regeln erstellten regulären Ausdrucks. Dieser ersetzt eine beliebige, auch leere Zeichenfolge.

DIRECTION =
Bestimmt die Richtung, in der die Listenvariable durchsucht werden soll.

DIRECTION = *FORWARD
Die Suche beginnt bei dem in BEGIN-INDEX bezeichneten Listenelement und endet bei dem in END-INDEX bezeichneten Listenelement.

DIRECTION = *REVERSE
Die Suche verläuft in umgekehrter Richtung, d.h. sie beginnt bei dem in END-INDEX bezeichneten Listenelement und endet bei dem in BEGIN-INDEX bezeichneten Listenelement.

Ergebnis

Positiver Integer-Wert, der das erste Listenelement angibt, welches den in PATTERN angegebenen Suchstring enthält. Dieser Wert ist größer gleich dem in BEGIN-INDEX angegebenen Wert und kleiner gleich der Anzahl der Listenelemente der angegebenen Variablen.

0
Der Suchstring wurde nicht gefunden.

Fehlermeldungen

SDP0492   DER OPERAND PATTERN UND DIE LISTENELEMENTE DUERFEN KEIN NULLBYTE 
          (X'00') ENTHALTEN
SDP0493   BEGIN-INDEX, END-INDEX, BEGIN-COLUMN UND END-COLUMN MUESSEN 
          GROESSER NULL SEIN
SDP0494   SYNTAXFEHLER IN REGULAEREM AUSDRUCK FUER OPERAND PATTERN
SDP1008   VARIABLE BZW. LAYOUT '(&00)' EXISTIERT NICHT
SDP1096   VARIABLE '(&00)' MUSS EINE LISTE VOM TYP STRING ODER ANY SEIN UND 
          NUR STRING-WERTE ENTHALTEN

Beispiel 1

/DECLARE-VARIABLE DATEI-NEU(TYPE=*STRING), MULTIPLE-ELEMENTS=*LIST
/READ-VARIABLE *LIST(DATEI-NEU), INPUT=*SYSDTA
Erste Zeile von der Datei
Zweite
Dritte Zeile von der Datei
4.
5. ........
6. von der Datei
7. ... von der ...
*END-OF-CMD
/MATCH = 0
/REPEAT
/   MATCH=SEARCH-LIST-INDEX('DATEI-NEU',PATTERN='Zeile', BEGIN-INDEX=MATCH+1)
/   SHOW-VARIABLE MATCH
/UNTIL (MATCH == 0)

Ausgabe

MATCH = 1
MATCH = 3
MATCH = 0

Dieses Beispiel zeigt, wie in der Listenvariablen DATEI-NEU mithilfe von SEARCH-LIST-INDEX( ) nach einem String (hier „Zeile“) ab einem bestimmten Zeichen gesucht wird. Durch die REPEAT-Schleife ist dabei gewährleistet, dass der Wert bei BEGIN-INDEX jeweils um den Wert 1 hochgesetzt wird, bis die gesamte Listenvariable durchlaufen ist. Wird innerhalb der REPEAT-Schleife folgender Ausdruck geschrieben, ändert sich die Ausgabe:

Beispiel 2

/MATCH=SEARCH-LIST-INDEX('DATEI-NEU', -
/                         PATTERN =' von ', -
/                         BEGIN-COLUMN=7,-
/                         END-COLUMN=11)
/SHOW-VARIABLE MATCH

Ausgabe

MATCH = 7

In diesem Beispiel wird die Listenvariable DATEI-NEU (siehe Beispiel 1) nach dem String „ von “ durchsucht, wobei die Suche auf den Spaltenbereich Spalte 7 bis (inklusive) Spalte 11 beschränkt wird: Nur das Listenelement 7 erfüllt die Suchbedingung, nicht jedoch die Listenelemente 1, 3 und 6.

Beispiel 3

/DECLARE-VARIABLE RECORD-LIST(TYPE=*STRING), MULTIPLE-ELEMENTS=*LIST
/READ-VARIABLE *LIST(RECORD-LIST), INPUT=*SYSDTA
WIEDEMANN BERNHARD 64528
BACHMANN MICHAEL 37214
ARTMANN HELMUT 74634
HEUBACH HUGO 97884
BACH ANDREAS 12012
KIRSCHNER ANITA 76325
*END-OF-CMD
/NAME = 'BACH'
/MATCH=SEARCH-LIST-INDEX('RECORD-LIST', 
/                         PATTERN ='^&NAME. ', -
/                         PATTERN-TYPE=*REGULAR-EXPRESSION -
/                       )
/NUMBER = INTEGER(EXTRACT-FIELD(RECORD-LIST#MATCH,3))
/WRITE-TEXT '&NAME. HAS NUMBER &NUMBER.'

Ausgabe

BACH HAS NUMBER 12012

Der Name „BACH“ wird in der Listenvariablen RECORD-LIST gesucht. Es wird nur ein Treffer gemeldet, denn durch die Angabe von PATTERN-TYPE = *REGULAR-EXPRESSION erfüllen „HEUBACH“ und „BACHMANN“ die Kriterien für den gesuchten String nicht: Der eine beginnt nicht mit „B“ und der andere endet nicht mit einem Leerzeichen nach „BACH“.

Beispiel 4

/DECLARE-VARIABLE A-LIST (TYPE=*STRING), MULTIPLE-ELEMENTS=*LIST
/                 A-LIST#1  = 'ACTIVE  '
/                 A-LIST#2  = 'WAITING '
/                 A-LIST#3  = 'INACTIVE'
/                 A-LIST#4  = 'ABORTED '
/                 A-LIST#5  = 'ACTIVE  '
/                 A-LIST#6  = 'LOCKED  '
/                 A-LIST#7  = 'WAITING '
/                 A-LIST#8  = 'ACTIVE  '
/                 A-LIST#9  = 'ACTIVE  '
/                 A-LIST#10 = 'INACTIVE'
/WAITING-IDX=SEARCH-LIST-INDEX('A-LIST','WAITING',DIRECTION=*FORWARD)
/SHOW-VARIABLE WAITING-IDX
WAITING-IDX = 2
/WAITING-IDX=SEARCH-LIST-INDEX('A-LIST','WAITING',DIRECTION=*REVERSE)
/SHOW-VARIABLE WAITING-IDX
WAITING-IDX = 7

In der Listenvariable A-LIST wird der String „WAITING“ gesucht. Die Vorwärtssuche meldet als Treffer das Listenelement 2. Die Rückwärtssuche meldet das Listenelement 7 als Treffer.