Как ассоциации, @NS и @NV работают в словарях UniData? - PullRequest
0 голосов
/ 26 февраля 2010

У кого-нибудь есть быстрый пример того, как Ассоциации, @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 ]

1 голос
/ 01 марта 2010

Часто 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.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  

Надеюсь, это поможет.

* 1014 Натан *

0 голосов
/ 26 февраля 2010

Чтобы ответить на часть моего собственного вопроса:

Ассоциация влияет только на «КОГДА», а не с. Если вы включаете 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. Это было бы полезно, если бы это было яснее, но да ладно ...

...