Результат выполнения программы дал ответ «мужской», интерпретация которого может означать, что женщин данного возраста на лечение не поступало.
· Функция $Query. Исходя их особого характера функции $Order, она, прежде всего, предназначена для получения всех по порядку существующих индексов в пределах данного уровня. Однако иногда более естественным является другой способ просмотра. Если просмотр последовательности индексов сначала уходит в глубину и показывает детали на более высоких уровнях до тех пор, пока эти уровни не закончатся, а потом просматривается следующая запись на более высокой ступени индексации, то это так называемый поиск «depth-first» (сначала вглубь), осуществляемый с помощью функции $Query. С помощью этой функции мы получаем имя узла на следующем уровне, но в отличие от функции $O, получается полная ссылка в виде строки символов:
USER>w $Q(^Medizine(27))
^Medizine(27,"мужской","110/80",38.6)
USER>w $Q(^Medizine(27,"мужской","110/80",38.6))
^Medizine(34,"женский","115/85")
Чтобы получить в нашей модели данных все определённые записи, необходимо применить цикл:
|
|
USER>d ^p6
^Medizine(27,"мужской","110/80",38.6) = Тарасов
^Medizine(34,"женский","115/85") = Ивененко
^Medizine(45,"мужской",36.6) = Петров
^Medizine(50,"женский") = Сидорова
^Medizine(60,"мужской","100/80",39.3) = Горбунков
^Medizine(65) = Турчинов
^Medizine(65,"мужской","125/60",36.6) = Иванов
^Medizine(71,"мужской","140/60",36.9) = Иващенков
· Анализ индексированных переменных с помощью функций $QLength и $QSubscript. В некоторых вариантах постановки задачи, вне зависимости от того, имеем ли мы дело с глобальной или локальной индексированной переменной, возникает необходимость исследования её структуры. На переднем плане тогда стоят вопросы:
1. Сколько уровней (индексов) имеет индексированная переменная?
2. Каково значение i-го индекса?
Демонстрация использования данной функции в терминале имеет следующий вид:
USER>w $QL("^Medizine(65)")
USER>w $QL("^Medizine(65,""мужской"")")
В последнем примере использованы двойные кавычки, чтобы интерпретатор языка не перепутал индекс и аргумент функции $QL. Аргумент всегда берётся в двойные кавычки.
Теперь обратимся к функции $QSubscript (сокращённо $QS), которая имеет два аргумента. Первым аргументом является исследуемое значение имени индексированной переменной, второй задаёт, какой именно индекс следует извлечь. Если в общем случае значение имени имеет форму Name(s1, s2, s3….sn), то результат функции $QS(Name(s1, s2, s3….sn), m) равен значению m-го индекса в случае, если m не превышает n:
USER>w $QS("^Medizine(27,""мужской"",""110/80"")",3)
110/80
|
|
· Комбинированное использование рассмотренных функций:
Пусть нужно дать ответ на вопрос, поступал ли на лечение пациент с фамилией «Иванов», и если поступал, то вывести информацию о нём. Ответом является программа, которая запрашивает фамилию пациента и выдаёт параметры, характеризующие его состояние. Фамилия помещается в переменную p, в цикле пролистываются все существующие записи о пациентах и далее если находим, что очередная запись равна р (фамилия человека), то выводим на экран все данные о нём.
Результат работы такой программы приведён на рисунке 9.1
Рисунок 9.1 – Результат работы программы.