INDEX function

Returns an INTEGER value that indicates the position of a search string within a source string.

Syntax

INDEX ( source , searchString [ , starting ] )
source
A CHARACTER, LONGCHAR or MEMPTR expression.
searchString
A CHARACTER or LONGCHAR expression whose position you want to locate in source. If searchString does not exist within source, INDEX returns 0.
starting
An integer that specifies at which left-most position in the string to start the search. For example, INDEX("abcdefabcdef","abc",6) returns 7.

The starting position is in characters if source is a CHARACTER or LONGCHAR expression. The starting position is in bytes if source is a MEMPTR.

Examples

For this example, you must enter 1, 2, 3, 4, or 5. The INDEX function checks if the digit exists in the string "12345".

r-index.p

DEFINE VARIABLE x    AS CHARACTER NO-UNDO FORMAT "9"
  LABEL "Enter a digit between 1 and 5".
DEFINE VARIABLE show AS CHARACTER NO-UNDO FORMAT "x(5)" EXTENT 5 
  LABEL "Literal" INITIAL ["One", "Two", "Three", "Four", "Five"].

REPEAT:
  SET x AUTO-RETURN.
  IF INDEX("12345",x) = 0 THEN DO:
    MESSAGE "Digit must be 1,2,3,4, or 5. Try again.".
    UNDO, RETRY.
  END.
  ELSE DISPLAY show[INTEGER(x)].
END.

This procedure also uses the starting option:

r-index2.p

DEFINE VARIABLE positions AS CHARACTER NO-UNDO FORMAT "x(60)".
DEFINE VARIABLE sentence  AS CHARACTER NO-UNDO FORMAT "x(72)".
DEFINE VARIABLE vowel     AS CHARACTER NO-UNDO FORMAT "x".
DEFINE VARIABLE found     AS INTEGER   NO-UNDO.
DEFINE VARIABLE loop      AS INTEGER   NO-UNDO.
DEFINE VARIABLE start     AS INTEGER   NO-UNDO.

FORM sentence LABEL "Type in a sentence"
  WITH FRAME top
  TITLE "This program will tell where the vowels are in a sentence.".

SET sentence WITH FRAME top.
DO loop = 1 TO 5:
  ASSIGN
    positions = ""
    vowel     = SUBSTRING("aeiou",loop,1)
    start     = 1
    found     = INDEX(sentence,vowel,start).

  DO WHILE found > 0:
    ASSIGN
      positions = positions + STRING(found) + " "
      start     = found + 1
      found     = INDEX(sentence,vowel,start).
  END.
  DISPLAY vowel LABEL "Vowel" positions LABEL "Is found at locations..." 
    WITH 5 DOWN.
  DOWN.
END.

The following example demonstrates using the INDEX function on a MEMPTR variable:

DEFINE VARIABLE mptr AS MEMPTR NO-UNDO.
DEFINE VARIABLE str AS CHAR NO-UNDO.
DEFINE VARIABLE str1 AS CHAR CASE-SENSITIVE NO-UNDO.

str = "Using MEMPTR as source param. MEMPTR is an ABL data type" .
SET-SIZE(mptr) = LENGTH(str, "raw") + 1.
PUT-STRING(mptr, 1) = str.
MESSAGE INDEX(mptr, "memptr", 10).  // returns 31

str1 = "memptr".
MESSAGE INDEX(mptr, str1, 10).  // returns 0

Notes

See also

LOOKUP function, R-INDEX function, Using MEMPTR