Хелпикс

Главная

Контакты

Случайная статья





SEEK(<Bыражение>[,<o6ласть>])



• 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).



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.