Product Documentation

FairCom ISAM for C

Previous Topic

Next Topic

KeyAtPercentile

Find key value located at about the given percentile.

Short Name

FRCKEY()

Type

Low-Level index file function

Declaration

LONG KeyAtPercentile(FILNO keyno, pVOID idxval, COUNT percnt)

Description

In V12 the file number typedef was formally changed from COUNT, a two-byte value to FILNO, a four-byte value. Refer to this link for compatibility details. Four Byte File Numbering

KeyAtPercentile() finds the key value located, approximately, at the percentile specified by percnt. The key value is copied into the area pointed to by idxval. percnt should be in the range from zero (0) to one-hundred (100).

KeyAtPercentile() is very efficient since it does not traverse all of the key values in order to determine the key value located at the specified percentile. However, KeyAtPercentile() is only approximate because it assumes that the key values are uniformly distributed among all of the b-tree leaf nodes. For more accuracy, use GetORDKey() or NbrOfKeysInRange().

KeyAtPercentile() can be used to support scroll bar positioning, found in many windowing environments, in those cases when the position must be maintained in key sequential order.

See also Record Offsets Under Huge File Support.

Return

If KeyAtPercentile() is successful, it returns the data record position associated with the key value in the index which is located, approximately, at the specified percentile value. If an error occurs or the index is empty, then KeyAtPercentile() returns zero. After a call to KeyAtPercentile() returns zero, check the value of uerr_cod: if uerr_cod is non-zero, an error condition was detected; otherwise, the index is empty.

Value

Symbolic Constant

Explanation

0

NO_ERROR

Successful function call.

60

KFRC_ERR

percnt must be in the range of 0 to 100 inclusive.

See c-tree Error Codes for a complete listing of valid c-tree error values.

Example

FILNO keyno;

TEXT idxval[24];


if (KeyAtPercentile(keyno,idxval,75))

printf("\n value at the 75th percentile is %.23s",idxval);

else if (uerr_cod)

printf("\n error %d occurred",uerr_cod);

else

printf("\n the index is empty");

Limitations

Since KeyAtPercentile() is only approximate, it may be necessary in scroll bar applications to ensure that the result of KeyAtPercentile() is consistent with the current location. For example, you may want to detect the direction of the scroll bar motion and ensure that the key value returned is consistent. For more accuracy, use GetORDKey() or NbrOfKeysInRange().

While KeyAtPercentile() is approximate, it is self-consistent. As you increase (decrease) percnt, the associated key values will increase (decrease) in value.

See also

EstimateKeySpan(), GetORDKey(), NbrOfKeysInRange()

TOCIndex