HOWTO: Provide Inverse AT() Functionality
ID: Q192764
|
The information in this article applies to:
-
Microsoft Visual FoxPro for Windows, versions 3.0, 3.0b, 5.0, 5.0a, 6.0
-
Microsoft Visual FoxPro for Macintosh, version 3.0b
-
Microsoft FoxPro for Windows, version 2.6a
-
Microsoft FoxPro for UNIX, version 2.6
-
Microsoft FoxPro for MS-DOS, versions 2.0, 2.5, 2.5a, 2.5b, 2.6, 2.6a
-
Microsoft FoxPro for Macintosh, version 2.6a
SUMMARY
The AT(), RAT() and equivalent functions can be used to return the
beginning numeric position of the first occurrence of a character
expression within another character expression. However, FoxPro does not
provide a function to find the first occurrence of a character that is not
the character that was passed as a parameter. In other words, suppose that
you have a string "AAAAB" and you wish to find the first occurrence of a
character that is not "A". This article demonstrates how to provide this
functionality.
MORE INFORMATION
Save the following code to a program file and run the program. The NotAt() function returns the second occurrence of a character that is not a "0" (zero). Here is the sample code:
*-- Code begins here.
CLEAR
? NotAt("0", "0x00CCAF77A", 2)
*-----------------------------------------------------------------
*- Function: NotAt
*- Summary: From within a passed string, finds the first
*- occurence of a character that is not the character
*- specified. In other words, this function works
*- opposite of the manner that AT() does.
*- Parameters: lsNotString - What we don't want. The function
*- finds the first character that is
*- not lsNotString.
*- lsSearchString - The string in which to search.
*- liOccurence - Indicates that NotAt should find
*- the liOccurence of a character
*- that is not lsNotString.
*-----------------------------------------------------------------
FUNCTION NotAt
PARAMETERS lsNotString, lsSearchString, liOccurrence
llFound = .F. && Flag indicates if we've found a character that
&& is NOT lsNotString.
llEndOfString = .F. && Flag to indicate that we've reached the end
&& of the string.
lnCounter = 0 && Tracks position during the search.
lnLength = LEN(lsSearchString)
liOccurCount = 0 && Tracks how many occurrences have been found.
*-- Loop until the desired character is found or the end of
*-- the string is reached.
DO WHILE NOT llFound AND NOT llEndofString
lnCounter = lnCounter + 1
lsCompare = SUBSTR(lsSearchString, lnCounter, 1)
IF lsCompare <> lsNotString
liOccurCount = liOccurCount + 1
*-- Have we found the occurrence we want?
IF liOccurCount = liOccurrence
llFound = .T.
ENDIF
ENDIF
IF lnCounter = lnLength
llEndOfString = .T.
ENDIF
ENDDO
RETURN lnCounter
*-- Code ends here.
REFERENCES
© Microsoft Corporation 1998, All Rights Reserved.
Contributions by Mike A. Stewart, Microsoft Corporation
Additional query words:
kbVFp300b kbVFp500a kbVFp500 kbVFp600 kbXBase
Keywords :
Version : MACINTOSH:2.6a,3.0b; MS-DOS:2.0,2.5,2.5a,2.5b,2.6,2.6a; UNIX:2.6; WINDOWS:2.6a,3.0,3.0b,5.0,5.0a,6.0
Platform : MACINTOSH MS-DOS UNIX WINDOWS
Issue type : kbhowto