[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
TOKENINIT()
Initializes a string for TOKENNEXT()
------------------------------------------------------------------------------
Syntax
TOKENINIT([<cString>,[<cDelimiter>],
[<nSkipDistance>]]) --> lStatus
Arguments
<cString> [@] Designates a character string for which tokenizing
is initialized. This must be passed by reference!
<cDelimiter> Designates a list (character string) of individual
delimiters for tokenizing.
<nSkipDistance> Designates the number of delimiting
characters/sequences after which a value, or a null string (if
necessary), is returned. The default value indicates that these
characters/sequences are not counted.
() When called with no parameters, TOKENNEXT() is set to begin at the
start of the string.
Returns
The function returns .F. when the string variable cannot be initialized.
For example, the function returns .F. if the string variable was not
passed by reference.
Description
When used in conjunction with the TOKENNEXT() function, an extremely
versatile incremental tokenizer is available to you. Specific
separation processes can be implemented much more quickly than with the
group of functions around TOKEN(). The speed increase is achieved in
two ways.
TOKENINIT() exchanges all delimiting characters for the first one in the
delimiter list. This means the entire delimiter list does not have to
be searched every time. The second advantage is that TOKENNEXT() does
not always begin its search for the token that is extracted at the
beginning of the string (see the function description for TOKENNEXT()).
However, in contrast to TOKEN(), TOKENNEXT() is unable to extract a
specific token.
You can also use the third parameter, a skip distance for the delimiter
characters. This allows recognition of empty lines within a text. In
this case, an empty line would be displayed by a CrLfCrLf sequence.
Since TOKENINIT() takes all designated delimiting characters and
exchanges them for something uniform, this sequence is changed to
CrCrCrCr. A skip distance of 2 means that the two delimiters (in this
case, Cr)) return a token each time. Since nothing precedes this
example, TOKENNEXT() returns a null string.
The function uses the following list of delimiters as standard:
CHR 32, 0, 9, 10, 12, 26, 32, 138, 141
and the characters ,.;:!?/\<<>>()^#&%+-*
This list can be replaced by your own delimiter list, <cDelimiter>.
Here are some examples of meaningful delimiting characters:
Table 4-5: Recommended Delimiting Sequences
------------------------------------------------------------------------
Description <cDelimiter>
------------------------------------------------------------------------
Pages CHR(12)(Form Feed)
Sentence ".!?"
File Name ":\."
Numeric strings ",."
Date strings "/."
Time strings ":."
------------------------------------------------------------------------
Notes
. When using a skip value, you must use the TOKENEND() function
as a loop condition.
. When TOKENINIT() exchanges all delimiting characters for a new
one, the first delimiter on the list is always used. This ensures
that no character contained in the token becomes a delimiter.
. When you use the TOKENINIT() or TOKENNEXT(), you cannot use
the TOKENSEP() function. The required information can be determined
using TOKENAT() in conjunction with the original string (status
before TOKENINIT()).
To determine the delimiter position before the last token, set
TOKENAT() to -1. To determine the delimiter position after the
last token, set TOKENAT to .T..
Examples
. Break a string into words. First the string must be
initialized:
cDelim := "!?.,-"
cString := "A.B-C,D!E??"
TOKENINIT(@cString, cDelim) // "A!B!C!D!E!!"
Do While .NOT. TOKENEND()
cWord := TOKENNEXT(cString)
? cWord
ENDDO
. Break text into lines. Take blank lines into account using a
skip distance of 2:
nCounter := 0
TOKENINIT(cTextString, CHR(13) + CHR(10), 2)
DO WHILE .NOT. TOKENEND()
nLine := TOKENNEXT(cTextString)
++ nCounter
ENDDO
? nCounter
See Also:
SAVETOKEN()
RESTTOKEN()
TOKENNEXT()
TOKENEND()
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson