Зацикливать только имена, соответствующие строке, а не весь массив - PullRequest
0 голосов
/ 22 октября 2019

В ^ 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

1 Ответ

0 голосов
/ 22 октября 2019

Почему ^ZNAME("val"), когда это должно быть ^ZNAME(val)

...