FUNCTION SearchArray(aArray, cSearchValue) LOCAL nStart, nEnd, nIndex, nFound nStart = 1 nEnd = ALEN(aArray,1) nFound = 0 DO WHILE nStart =< nEnd AND nFound = 0 nIndex = INT((nStart + nEnd) /2) DO CASE CASE aArray[nIndex] = cSearchValue nFound = nIndex CASE aArray[nIndex] > cSearchValue nEnd = nIndex - 1 OTHERWISE nStart = nIndex + 1 ENDCASE ENDDO RETURN nFoundWalter,
FUNCTION BArraySearch > >LPARAMETERS tarray, tsearchfor, tlsoftsearch > >LOCAL lnfirst, lnlast, lnmid, llfound, lnresult >lnfirst = 1 >lnlast = ALEN(tarray, 1) >llfound = .F. >lnresult = 0 >DO WHILE NOT llfound AND lnfirst < lnlast > lnmid = INT(lnfirst + lnlast) > llfound = (tsearchfor = tarray[lnmid]) > IF NOT llfound THEN > IF tsearchfor > tarray[lnmid] THEN > lnfirst = lnmid + 1 > ELSE > lnlast = lnmid - 1 > ENDIF > ENDIF >ENDDO >IF llfound THEN > lnresult = lnmid >ELSE > IF llsoftsearch THEN > lnresult = lnlast > ENDIF >ENDIF >RETURN lnresultThe beauty of this is that it can be implemented, not only with a array, but an ordered list or cursor.