Files
harbour-core/harbour/contrib/hbnf/findith.prg
Viktor Szakats 55801b18c4 2008-08-20 12:50 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* tests/longdev.prg
   * tests/hbpptest/hbpptest.prg
   * tests/testcgi.prg
   * tests/foreach.prg
   * tests/onidle.prg
   * tests/tstchbx.prg
   * tests/codebl.prg
   * tests/tstdbi.prg
   * tests/vmasort.prg
   * tests/tstasort.prg
   * tests/testbrw.prg
   * tests/inkeytst.prg
   * tests/testrdd2.prg
   * tests/keywords.prg
   * tests/testhtml.prg
   * tests/readhrb.prg
   * tests/stripem.prg
   * tests/wvtext.prg
   * tests/testpre.prg
   * tests/seconds.prg
   * tests/fsplit.prg
   * tests/mousetst.prg
   * contrib/hbmysql/tmysql.prg
   * contrib/hbct/numconv.prg
   * contrib/hbct/ctmisc.prg
   * contrib/hbodbc/todbc.prg
   * contrib/hbapollo/tests/apollo.prg
   * contrib/hbnf/acctyear.prg
   * contrib/hbnf/acctadj.prg
   * contrib/hbnf/nwsem.prg
   * contrib/hbnf/week.prg
   * contrib/hbnf/acctmnth.prg
   * contrib/hbnf/savearr.prg
   * contrib/hbnf/madd.prg
   * contrib/hbnf/mouse1.prg
   * contrib/hbnf/month.prg
   * contrib/hbnf/findith.prg
   * contrib/hbnf/acctweek.prg
   * contrib/hbnf/pegs.prg
   * contrib/hbnf/acctqtr.prg
   * contrib/hbnf/nooccur.prg
   * contrib/hbnf/dayofyr.prg
   * contrib/hbnf/menu1.prg
   * contrib/hbnf/sqzn.prg
   * contrib/hbnf/asum.prg
   * contrib/hbnf/aavg.prg
   * contrib/hbnf/any2any.prg
   * contrib/hbnf/adessort.prg
   * contrib/hbnf/amedian.prg
   * contrib/hbnf/blink.prg
   * contrib/hbnf/qtr.prg
   * contrib/hbnf/aredit.prg
   * contrib/hbnf/xbox.prg
   * contrib/hbnf/ftround.prg
   * contrib/hbnf/invclr.prg
   * contrib/hbnf/tempfile.prg
   * contrib/hbnf/diskfunc.prg
   * contrib/hbnf/mouse2.prg
   * contrib/hbnf/daytobow.prg
   * contrib/hbnf/anomatch.prg
   * contrib/hbnf/datecnfg.prg
   * contrib/hbnf/tbwhile.prg
   * contrib/hbnf/year.prg
   * contrib/hbnf/elapsed.prg
   * contrib/hbnf/dfile.prg
   * contrib/hbnf/clrsel.prg
   * contrib/hbmisc/twirler.prg
   * contrib/hbmisc/fileread.prg
   * contrib/hbmisc/stringp.prg
   * contrib/hbgf/hbgfw32/winctrl.prg
   * contrib/hbgf/hbgfw32/form.prg
   * contrib/hbgf/hbgfos2/winctrl.prg
   * contrib/hbgf/hbgfos2/tform.prg
   * contrib/hbtip/httpcln.prg
   * contrib/hbvpdf/hbvpdf.prg
   * contrib/hbvpdf/hbvpdft.prg
   * contrib/examples/guestbk/guestbk.prg
   * contrib/examples/pe/editorhi.prg
     * Some more general code cleanups ( if() -> iif() ).
2008-08-20 11:04:28 +00:00

108 lines
3.0 KiB
Plaintext

/*
* $Id$
*/
/*
* File......: findith.prg
* Author....: David Husnian
* CIS ID....: ?
*
* This is an original work by David Husnian and is placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* Rev 1.2 15 Aug 1991 23:03:36 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.1 14 Jun 1991 19:51:52 GLENN
* Minor edit to file header
*
* Rev 1.0 01 Apr 1991 01:01:22 GLENN
* Nanforum Toolkit
*
*/
/* $DOC$
* $FUNCNAME$
* FT_FINDITH()
* $CATEGORY$
* String
* $ONELINER$
* Find the "ith" occurrence of a substring within a string
* $SYNTAX$
* FT_FINDITH( <cCheckFor>, <cCheckIn>, <nWhichOccurrence> ;
* [, <lIgnoreCase> ] ) -> <nStringPosition>
* $ARGUMENTS$
* <cCheckFor> is the string to search for.
*
* <cCheckIn> is the string to search.
*
* <nWhichOccurrence> is the number of the occurrence to find.
*
* <lIgnoreCase> is a logical indicating if the search is to be case
* sensitive. The default is no case sensitivity (.F.).
* $RETURNS$
* The position in the string cCheckIn of the ith occurrence of cCheckFor.
* $DESCRIPTION$
* This function finds the position in a string of the "ith" time another
* string appears in it.
* $EXAMPLES$
* // Find the Position in cMemoString of
* // the 10th Occurrence of "the", case
* // insensitive
*
* nNextPosition := FT_FINDITH("the", cMemoString, 10)
* $SEEALSO$
* FT_AT2()
* $END$
*/
#define IS_NOT_LOGICAL(x) (VALTYPE(x) != "L")
#define MAKE_UPPER(cString) (cString := UPPER(cString))
#define NULL ""
#ifdef FT_TEST
FUNCTION MAIN( cCk, cStr, nOcc, xCase )
LOCAL nFind
if pcount() != 4
QOut( "usage: findith cCk cStr nOcc xCase")
quit
endif
xCase := iif( xCase == "Y", .t., .f. )
nOcc := val(nOcc)
QOut( iif( xCase, "Ignoring ", "Observing ") + "case:" )
QOut( cStr )
nFind := FT_FINDITH( cCk, cStr, nOcc, xCase )
QOut( iif( nFind > 0, space( nFind - 1) + "^" , "Not found" ) )
RETURN nil
#endif
FUNCTION FT_FINDITH(cCheckFor,cCheckIn,nWhichOccurrence,lIgnoreCase)
LOCAL nIthOccurrence
// Is Case Sensitivity Important??
IF IS_NOT_LOGICAL(lIgnoreCase) .OR. ;
lIgnoreCase
MAKE_UPPER(cCheckFor) // No, Force Everything to Uppercase
MAKE_UPPER(cCheckIn)
ENDIF // IS_NOT_LOGICAL(lIgnoreCase) or
// lIgnoreCase
RETURN (iif(nWhichOccurrence == 1, ;
AT(cCheckFor, cCheckIn), ;
iif((nIthOccurrence := AT(cCheckFor, ;
STRTRAN(cCheckIn, cCheckFor, ;
NULL, 1, ;
nWhichOccurrence-1))) == 0, ;
0, ;
nIthOccurrence + ((nWhichOccurrence - 1) * LEN(cCheckFor)))))