Srch
The Srch internal function searches an array and returns the row number matching the argument. If the argument is not found, then either 0 (BR 4.1 and below) or -1 (BR 4.2 and above). The argument must be the same data type (string or numeric) as the array. The optional "row" parameter defines the starting array element for the search.
SRCH(<array-name>,<argument>[,<row>])
OR
SRCH(<array-name$>,[^]<argument$>[,<row>])
Optional Case Insensitivity and Substring matching
If argument$ begins with the caret ^, then the ^ is stripped and the search for argument$ in array-name$ becomes case insensitive (as of 4.2). Also, when the caret ^ is specified, the search is performed for sub-strings instead of whole strings.
For example:
00010 let a$(1)='abc' 00020 let a$(2)='def' 00030 print srch(mat a$,'^B')
Output:
1
Given the (4.2+) SRCH use of the "^" character, to search for '^' with "let X=POS(string$,'^',5)" you will need to either turn the search character off with CONFIG SEARCH_CHAR OFF or replace the search character with something else as in CONFIG SEARCH_CHAR 7E (where 7E is the hexadecimal representation of an alternate search character).
Comments and Examples
As of 4.2, SRCH returns zero if it fails (instead of -1) unless OPTION BASE ZERO is in effect or OPTION 56 is in effect.
For versions 4.1 and earlier, when the search is unsuccessful, Srch returns -1. Using OPTION BASE 0 will also cause SRCH to return a zero.
In line 510 below, if STATES$ is a string array containing the 50 valid two-letter state abbreviations, then a data entry program could check whether the operator entered a correct abbreviation into the variable ST$ by the following:
500 LINPUT ST$ 510 If Srch(Mat States$,ST$) = 0 then goto 500
The example below will find the selected item in a combo box
500 combo_choice$=srch(mat array-name$,"^^")
IMPORTANT
Earlier versions of BR return 0 when SRCH doesn't find the desired argument in the array. Later versions return -1 in the same situation. In order to make you programs produce the same results regardless of the BR version, use the following logic:
00010 if not SRCH(mat array$, string_to_find$) > 0 then 00020 ! add the code for when the result is NOT found 00030 else 00040 ! add the code for when the result IS found 00050 end if
Related Functions
Technical Considerations
- If a match was not found, Srch will return -1.