Files
harbour-core/contrib/hbnf/at2.prg
vszakats 9687850865 2013-03-16 02:10 UTC+0100 Viktor Szakats (harbour syenar.net)
* (all files)
    * stripped svn header
    * minor cleanups
    ; use following command to find out the history of files:
       git log
       git log --follow
       git blame
       git annotate
2013-03-16 02:11:42 +01:00

91 lines
2.1 KiB
Plaintext

/*
* Author....: Ralph Oliver, TRANSCOM SYSTEMS
* CIS ID....: 74030,703
*
* This is an original work by Ralph Oliver and is placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* Rev 1.2 15 Aug 1991 23:05:58 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.1 12 Jun 1991 00:46:28 GLENN
* Posted a referee suggestion: Around line 118, break out if no
* occurrences (note the IF/ENDIF before the NEXT and RETURN at the
* bottom of the function).
*
* Rev 1.0 07 Jun 1991 23:03:28 GLENN
* Initial revision.
*
*
*/
FUNCTION ft_At2( cSearch, cTarget, nOccurs, lCaseSens )
LOCAL nCount, nPos, nPos2 := 0
LOCAL cSubstr := cTarget
// Set default parameters as necessary.
__defaultNIL( @lCaseSens, .T. )
__defaultNIL( @nOccurs, 1 )
FOR nCount := 1 TO nOccurs
// Store position of next occurrence of cSearch.
IF lCaseSens
nPos := At( cSearch, cSubstr )
ELSE
nPos := At( Upper( cSearch ), Upper( cSubstr ) )
ENDIF
// Store position of cSearch relative to original string.
nPos2 += nPos
// Resize cSubstr
cSubstr := SubStr( cSubstr, At( cSearch, cSubstr ) + 1 )
// Breakout if there are no occurences here
IF nPos == 0
EXIT
ENDIF
NEXT
RETURN nPos2
FUNCTION ft_RAt2( cSearch, cTarget, nOccurs, lCaseSens )
LOCAL nCount, nPos, nPos2 := 0
LOCAL cSubstr := cTarget
// Set default parameters as necessary.
__defaultNIL( @lCaseSens, .T. )
__defaultNIL( @nOccurs, 1 )
FOR nCount := 1 TO nOccurs
// Store position of next occurrence of cSearch.
IF lCaseSens
nPos := RAt( cSearch, cSubstr )
ELSE
nPos := RAt( Upper( cSearch ), Upper( cSubstr ) )
ENDIF
// Store position of cSearch relative to original string.
nPos2 := nPos
// Resize cSubstr
cSubstr := SubStr( cSubstr, 1, RAt( cSearch, cSubstr ) - 1 )
// Breakout if there are no occurences here
IF nPos == 0
EXIT
ENDIF
NEXT
RETURN nPos2