| **Navigation:** [[introduction.htm|Language Reference]] > 13 - Built-in Functions >====== INSTRING (return substring position) ====== | [[instance return variable s thread instance address 1.htm|{{btn_prev_n.gif|Previous page}}]][[introduction.htm|{{btn_home_n.gif|Return to chapter overview}}]][[int truncate fraction .htm|{{btn_next_n.gif|Next page}}]] |
| ||
**INSTRING(**//substring//,//string// [,//step//] [,//start//]**)**
**Returns an unsigned integer value from zero to the length of the search string.**
{{blk2blue.jpg|blk2blue.jpg}}
| **INSTRING** | Searches for a substring in a string. |
| //substring// | A string constant, variable, or expression that contains the string for which to search. You should CLIP a variable //substring// so INSTRING will not look for a match that contains the trailing spaces in the variable. |
| //string// | A string constant, or the label of the STRING, CSTRING, or PSTRING variable to be searched. |
| //step// | A numeric constant, variable, or expression which specifies the step length of the search. A //step// of 1 will search for the //substring// beginning at every character in the //string//, a //step// of 2 starts at every other character, and so on. A negative //step// value (-1) will search from right to left within the //string//. **If //step// is omitted, the step length defaults to the length of the //substring//**. |
| //start// | A numeric constant, variable, or expression which specifies where to begin the search of the //string//. If omitted, the search starts at the first character position. **ClarionWin32** The first character position is one (1) **Clarion#** The first character position is zero (0) |
**Remarks:**
The **INSTRING** procedure //steps// through a //string//, searching for the occurrence of a //substring//. If the //substring// is found, the procedure returns the //step// number on which the //substring// was found.
**ClarionWin32**
If the //substring// is not found in the //string//, **INSTRING** returns zero.
**Clarion#**
In Clarion# indexing starts with 0, so if the substring is not found then -1 is returned.
**INSTRING** starts to search for //substring// from the //start// position in the //string// and moves from right to left if the step is a positive number, or from left to right if step is a negative number until the //substring //is found. If the length of the unchecked portion of the //string// is less than length of the search //substring //the search stops.
If the search substring is not found **INSTRING** returns zero.
If the search //substring// is found, the result is equal to the number of //step//s from the origin of the //string// to the found position. If the value of //step// is not equal to 1, the result is rounded up to the whole number of steps as follows:
[[int truncate fraction .htm|INT]] ((found position - 1) / //step//) + 1
The only negative //step// value allowed is -1, and the search //string// must be 1 character long in this case. In other words, a negative //step// is not allowed with any //substring// greater than 1 character.
| **Return Data Type:** | UNSIGNED |
**Clarion Win32 examples:**
! find the colon character searching from Right to Left using step of -1
! the 4th parameter is our start position, which must be the last character of the clipped string
s = '123:567:9'
i = INSTRING(':',s,-1,LEN(CLIP(s)))
!! i will be equal to 8
! find the colon character searching from Left to Right using step of 1
s = '123:567:9'
i = INSTRING(':',s,1,1)
!! i will be equal to 4
! find the string '567' searching from Left to Right using step of 1
s = '123:567:9'
i = INSTRING('567',s,1,1)
!! i will be equal to 5
! if the search string is not found the return value is 0
s = '123:567:9'
i = INSTRING('X',s,1,1)
!! i will be equal to 0
! Search in reverse for the last backslash
ExePath=COMMAND('0')
BS=INSTRING('\',ExePath,-1,SIZE(ExePath))
ExePath=SUB(ExePath,1,BS-1)
! If Step parameters is not specified it is the Len of the SubString
X= instring('**', '1234 **Yes')
! X = 0 because Step is 2 (the length of '**') and the ** is in position 6
**Clarion# example:**
In Clarion#, following the standard for all .Net languages **the first character position in any string is Zero** (not 1 as it is in Clarion Win32)
! find the colon character searching from Right to Left using step of -1
s = '123:567:9'
i = INSTRING(':',s,-1,LEN(CLIP(s)))
!! i will be equal to 7
! find the colon character searching from Left to Right using step of 1
s = '123:567:9'
i = INSTRING(':',s,1,0)
!! i will be equal to 3
! find the string '567' searching from Left to Right using step of 1
s = '123:567:9'
i = INSTRING('567',s,1,0)
!! i will be equal to 4
! if the search string is not found the return value is -1
s = '123:567:9'
i = INSTRING('X',s,1,1)
!! i will be equal to -1
**See Also:**
[[strpos_return_matching_value_position_.htm|STRPOS]]
[[sub return substring of string .htm|SUB]]
[[string fixed length string .htm|STRING]]
[[cstring fixed length null terminated string .htm|CSTRING]]
[[pstring embedded length byte string .htm|PSTRING]]
[[implicit string arrays and string slicing.htm|String Slicing]]
[[inlist return entry in list .htm|INLIST]]