В ^ ZNAME хранятся два имени: MITCHELL, DAVID J и SMITH, JOHN A.
N prompt,val
S prompt="Enter a name (LAST,FIRST MI): "
F W !,prompt R val Q:val="" D
. I val'?1.A1",".1" "1.A.1(1" "1A) W !,"Invalid name"
. E S ^ZNAME(val)=""
F S val=$O(^ZNAME(val)) Q:val="" D
. W !,"You entered: ",val
Q
^ZNAME("MITCHELL, DAVID J")
^ZNAME("SMITH, JOHN A")
Я могу ввести "SM" и получить желаемые результаты SMITH, JOHN A. Но я хочу улучшить этот код, чтобы циклически повторять только имена, соответствующие строке, а не весь массив. Я занимаюсь этим уже два дня. Я добавил команды $ L и $ E в этот код, но не смог получить желаемый результат. Я определенно хочу знать, что я делаю неправильно. Будет ли кто-то в состоянии предложить руководство по шагам для достижения этого улучшения. Спасибо.
N partial,val
S partial="Enter a name or partial name: "
F W !,partial R val Q:val="" D
. W !,$O(^ZNAME(val))
Q
Я внес некоторые изменения в код, чтобы попытаться получить результат, но он продолжает читать ^ ZNAME и не читает в имени.
N name,val,len,pos,char,
S name="Enter a name or partial name: "
I name="" Q
S len=$L(name)
F pos=1:1:len D
.S char=$E(name,pos)
S char=""
F S char=$O(^ZNAME(char)) Q:char="" D
.W !,char
Q