FUNCTION GetRate >LOCAL lcInAlias, lcSeekValue, lcCheckDigit, lcAssertSetting, llFoundPrefix, lnResult >lcInAlias = ALIAS() && save the currently selected work area >lcAssertSetting = SET('ASSERTS') && and the SET ASSERTS mode >lcSeekValue = NULL &&default seek value to NULL >lnResult = NULL &&default result to NULL >llFoundPrefix = .F. &&And by default the seek failed >SET ASSERTS ON && enable asserts >IF ! USED('long_distance') > * if the lookup table isn't in use already in this datasession, open it > USE long_distance IN 0 SHARED && make sure the table is in use >ENDIF >SELECT long_distance && Select the lookup table before trying to find in it >SET ORDER TO <i>whatever tag is correct</i> && in the right sort order >* >* I use a local variable so that the LEFT() function is only called once, >* and the code becomes a tad clearer in the DO CASE >* >lcCheckDigit = LEFT(view1.dialednr,1) >* Check how many characters to use for lookup based on first character >DO CASE >CASE lcCheckDigit = '1' > lcSeekValue = LEFT(view1.dialednr,4) >CASE lcCheckDigit = '0' > lcSeekValue = LEFT(view1.dialednr,6) >CASE lcCheckDigit = '#' > lcSeekValue = LEFT(view1.dialednr,3) >OTHERWISE > * Oops - the dialednr isn't in the form we expected - use an ASSERT > * to let us know an error occurred while developing, to let us go > * into the debugger when the error occurs. ASSERT gives us a message > * telling us what we think went wrong as a part of the statement > ASSERT .F. MESSAGE 'Lead dialednr character "' + lcCheckDigit + '" not supported!' >ENDCASE >IF ! ISNULL(lcSeekValue) > * the dialednr started with a valid character, so try to find the prefix > * we grabbed from our rate table > llFoundPrefix = SEEK(lcSeekValue) >ENDIF >IF llFoundPrefix > * found it - save the rate we found! > lnResult = long_distance.rate >ELSE > * oops - not in our lookup table - use ASSERT to let me know > * what went wrong > ASSERT ! ISNULL(lcSeekValue) MESSAGE 'Cound not find number prefix "' + lcSeekValue +'" in long_distance table' >ENDIF >* Restore the initially-selected work area and the ASSERT setting >IF ! EMPTY(lcInAlias) > SELECT lcInAlias >ELSE > SELECT 0 >ENDIF >SET ASSERTS &lcAssertSetting >RETURN lnResult>