Microsoft KB Archive/192764

= How To Provide Inverse AT Functionality =

Article ID: 192764

Article Last Modified on 7/1/2004

-

APPLIES TO


 * Microsoft Visual FoxPro 3.0 Standard Edition
 * Microsoft Visual FoxPro 3.0b Standard Edition
 * Microsoft Visual FoxPro 5.0 Standard Edition
 * Microsoft Visual FoxPro 5.0a
 * Microsoft Visual FoxPro 6.0 Professional Edition
 * Microsoft Visual FoxPro 3.0b for Macintosh
 * Microsoft FoxPro 2.6a Standard Edition
 * Microsoft FoxPro 2.6 for SCO/UNIX
 * Microsoft FoxPro 2.0
 * Microsoft FoxPro 2.5b for MS-DOS
 * Microsoft FoxPro 2.5a
 * Microsoft FoxPro 2.5b for MS-DOS
 * Microsoft FoxPro 2.6 for MS-DOS
 * Microsoft FoxPro 2.6a Standard Edition
 * Microsoft FoxPro 2.6a Professional Edition for Macintosh

-



This article was previously published under Q192764



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.

