Как ассоциации, @NS и @NV работают в словарях UniData?
У кого-нибудь есть быстрый пример того, как ассоциации, @NS
а также @NV
работать в UniData?
Я пытаюсь найти ассоциации в элементах словаря, но не могу заставить их что-либо делать.
Например, в записи
<1,1> = A
<1,2> = B
<2,1> = Apple
<2,2> = Banana
Я создал 3 словарных пункта. Письмо и фрукты, COMBO следующим образом
ПИСЬМО:
<1> = D
<2> = 1
<3> =
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO
ФРУКТЫ:
<1> = D
<2> = 1
<3> =
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO
COMBO:
<1> = PH
<2> = LETTER FRUIT
Делать LIST LETTER FRUIT
или же LIST COMBO
не имеет значения, когда LETTER и FRUIT не имеют ассоциации, объявленной в 6.
В этот момент я подумал, что это может сгруппировать многозначные значения при выборе, поэтому я создал еще одну запись как таковую:
<1,1> = A
<1,2> = B
<2,1> = Banana
<2,2> = Apple
дела SELECT MyFile WITH LETTER = “A” and FRUIT = “Apple”
выбирает обе записи, так что этого тоже не может быть.
Затем я попытался изменить ПИСЬМО так:
<1> = I
<2> = EXTRACT(@RECORD,1,@NV,1);EXTRACT(FRUIT,1,@NV,1);@1:" (":@2:")" : @NS
<3> =
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO
Надеюсь, что это LIST MyFile LETTER
вернул бы все разные буквы с соответствующими фруктами в скобках. Это также не сработало, так как теперь LETTER отображал только первое многозначное значение вместо всех. Например:
LIST MyFile LETTER 14:05:22 26 FEB 2010 1
MyFile.... LETTER..............
RECORD2 A (Banana)1
RECORD A (Apple)1
2 records listed
Руководства не идут дальше слова "ассоциация". Кто-нибудь может уточнить это для меня?
2 ответа
Часто NV и NS работают только при использовании BY-EXP в ваших операторах LIST или SELECT. Вам нужно использовать модификаторы, которые специально смотрят на MultiValue и SubValues.
КОГДА это одно, а BY-EXP это другое. Есть и другие, но не уверены, что они с моей головы. Я в основном использую BY-EXP и BY-EXP-DSND.
LIST MyFile BY-EXP LETTER = "A" BY-EXP FRUIT ="Apple" LETTER FRUIT LETTER.COMBO
Чтобы вернуть все комбинации, вы должны сделать следующее:
LIST MyFile BY-EXP LETTER LETTER FRUIT LETTER.COMBO
Измените следующее виртуальное поле с "LETTER" на "LETTER.COMBO" или что-то в этом роде:
<1> = I
<2> = EXTRACT(@RECORD,1,@NV,1);EXTRACT(FRUIT,1,@NV,1);@1:" (":@2:")" : @NS
<3> =
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO
Надеюсь, это поможет.
-Натан
Чтобы ответить на часть моего собственного вопроса:
Только "КОГДА" зависит от ассоциации, а не с. Если вы включаете UDT.OPTIONS 94 и делаете
LIST MyFile WHEN LETTER = "A" AND FRUIT="Apple" COMBO
при использовании моего D-Type определения LETTER я получаю
LIST MyFile WHEN LETTER = "A" AND FRUIT="Apple" LETTER FRUIT 16:06:42 26 FEB 2010 1
MyFile.... LETTER.............. FRUIT...............
RECORD A Apple
1 record listed
Чего и следовало ожидать.
Чтобы использовать предложение WHEN, вы должны быть в ECLTYPE U, а не в P. Это было бы полезно, если бы это было яснее, но да ладно...