StringScanner.ScanToToken Function
Syntax
Text as C = ScanToToken as C(kind as c)
Arguments
- Text
The text between the starting and ending offset positions.
- kind
The type of token to find. The value of this argument can be a combination of the following flags.
- "I" = identifier
- "F" = function
- "S" = string
- "D" = date
- "N" = number
- "L" = logical
- "U" = unary operator
- "B" = binary
- "A" = array
- "P" = property of array
- "M" = array that is a child property of another array (multi-level array)
- "*" = all token types
- "X" = XBASIC expression (ignore Xbasic comments)
Description
Skip until a token is encountered. Return text we scanned over.
Discussion
The <StringScanner>.ScanToToken() function moves the offset to the beginning of the token.
Example
dim t as C
t = <<%txt%
result[1] = foo( x + y , "Some text" ) .or. (lookfor = .F.) .or. ( date()= {10/10/2005}
complex[1].subelement[1].property
%txt%
scanner = stringscanner.create(t)
' find the first line with a logical operator
? scanner.SkipToToken("L")
= .T.
? scanner.GetToOffset()
= result[1] = foo( x + y , "Some text" ) .or. (lookfor =
? scanner.GetRemainder()
= .F.) .or. ( date()= {10/10/2005}
complex[1].subelement[1].property
' find the first line with a property of array
? scanner.SkipToToken("P")
= .T.
? scanner.GetLineText()
= "complex[1].subelement[1].property"The following script produces the dialog shown below.
dim t as C
dim all as C
t = <<%txt%
result[1] = foo( x + y , "Some text" ) .or. (lookfor = .F.) .or. ( date()= {10/10/2005}
complex[1].subelement[1].property
%txt%
scanner = stringscanner.create(t)
all = ""
while scanner.SkipToToken("*")
all = all + scanner.ScanTypedToken("*") + crlf()
end while
scanner.Offset = 1
while scanner.SkipToToken("S")
saveOffset = scanner.Offset
oldString = unquote(scanner.ScanOverToken("S"))
newOffset = scanner.Offset
scanner.Offset = saveOffset
scanner.Replace(quote("["+upper(oldString)+"]"),newOffset-saveOffset)
end while
result = scanner.Text
ui_dlg_box("token demo",<<%dlg%
Scanned tokens|Changed String;
[%M%.25,22all]|[%M%.75,22result];
<&Ok>
%dlg%)See Also
.gif)