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>>