![]()
|
|||||||
SEEK(<Bыражение>[,<o6ласть>]) ⇐ ПредыдущаяСтр 5 из 5 • SEEK(<Bыражение>[,<o6ласть>]) Она так же, как и команда SEEK, выполняет поиск записи в индексном файле и устанавливает на него указатель записей с возвращением значения .Т., если поиск удачный, и .F. - если нет. Функция SEEK() заменяет комбинацию команды SEEK и функции FOUND(). Такое совмещение весьма полезно, поскольку обычно для того, чтобы предпринять какие-то дальнейшие шаги после поиска, все равно нужно убедиться в его успешности, функция FOUND() обычно включается в состав команды анализа выполнения условий IF. Кроме того, она допускает поиск в неактивной рабочей <области>, заданной числовым выражением. Пример. Пусть нужно указать фамилии родителей, у которых трое детей. Если их не окажется, выводить ничего не нужно. USEkadr INDEX ON det TO kadrdet COMPACT IF SEEK(3) LIST fam,det WHILE det=3 ENDIF Рассмотрим технику индексного поиска. Двоичный поиск, называемый еще поиском делением пополам, начинается с середины индексного файла. Берется его центральный элемент и сравнивается с ключом, указанным в команде/функции SEEK. Если значение <ключа> больше -индексного выражения этого элемента, то поиск ведется в нижней части индекса, если нет - в верхней. В выбранной половине снова находится середина и определяется новая подобласть поиска. И так до тех пор, пока не будет зафиксировано искомое совпадение либо не будет выяснено, что нужных данных нет. В первом случае указатель записей базы данных устанавливается на запись с найденным в индексе номером, во втором - вырабатывается значение .Т. ("Истина") для функции EOF(), индицирующей достижение конца файла (если SET NEAR OFF).
|
|||||||
|