0

我正在努力在 M 中创建一个程序,以某种格式读取名称的输入。一旦用户放置一个空值,它就会打印出所有的值。我卡住的地方是读入一个全局变量。我期待着我能收到的任何意见。

          n prompt,val,done
          s prompt="Enter a name (LAST,FIRST MI): "
          s val="" f in=1:1 s val=$O(^ZNAME(val)) q:val=""
          f  w !,prompt r val q:val=""  d   q:done 
          . i val'?1.A1",".1" "1.A.1(1" "1A) w !,"Invalid name" q
          . s val=$GET(^ZNAME)
          . s done=1
          i val="" q  
          w !,"You entered: ",val
         . s done=1
         q
4

2 回答 2

1

你的代码看起来很奇怪。首先,这一行s val="" f in=1:1 s val=$O(^ZNAME(val)) q:val=""是无用的,只需对 global 的第一个下标中的所有值进行排序。然后,当输入 val 将通过您的模式时,您的代码应该会UNDEFINED因 done 变量的错误而失败。最后它从 global 获取新值^ZNAME,无论输入什么,它都会得到一个值。

于 2016-03-17T22:16:28.400 回答
0

我不完全理解你想要做什么,但这是我建立的:

  • 读名字直到你给出一个空的名字
  • 如果名称遵循模式,请将他添加到 ^ZNAME
  • 最后打印 ^ZNAME 中的所有名称

干得好:

readlist
    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

示例(使用 GTM):

GTM>D readlist^ZZTEST

Enter a name (LAST,FIRST MI): first,last
Enter a name (LAST,FIRST MI): name,surname
Enter a name (LAST,FIRST MI):
You entered: first,last
You entered: name,surname
GTM>zwr ^ZNAME
^ZNAME("first,last")=""
^ZNAME("name,surname")=""
于 2016-03-18T07:38:49.493 回答