SEARCH(where,what)
; Search string in a Global or Array
I $G(where)="" Q
I $G(what)="" Q
F S where=$Q(@where) Q:where="" D
. I ((where[what)!(@where[what)) D
.. W where,"=",@where,!
.. W $E(where,$F(where,"("),$L(where)-1),!
Q
要提取的下标(一个或多个键,因为多个可以存在的话)我会使用$ E和$ F,因为会给时的问题“(”或“)”是下标部分。
W $E(where,$F(where,"("),$L(where)-1)
在GTM上测试。
正常输入:
GTM>ZWR ^ZNAME
^ZNAME("first,last")="Second Street"
^ZNAME("name,surname")="First Street"
GTM>D SEARCH^ZZTEST("^ZNAME","last")
^ZNAME("first,last")=Second Street
"first,last"
GTM>D SEARCH^ZZTEST("^ZNAME","Street")
^ZNAME("first,last")=Second Street
"first,last"
^ZNAME("name,surname")=First Street
"name,surname"
GTM>D SEARCH^ZZTEST("^ZNAME(""first,last"")","Street")
^ZNAME("name,surname")=First Street
"name,surname"
GTM>D SEARCH^ZZTEST("^ZNAME",",sur")
^ZNAME("name,surname")=First Street
"name,surname"
作为奖励,你还可以用它来搜索本地阵列:
GTM>ZWR ARRAY
ARRAY(1)="Apple"
ARRAY(1,1)="Apple pie"
ARRAY(2)="Orange"
GTM>D SEARCH^ZZTEST("ARRAY","Apple")
ARRAY(1)=Apple
1
ARRAY(1,1)=Apple pie
1,1
GTM>D SEARCH^ZZTEST("ARRAY","pie")
ARRAY(1,1)=Apple pie
1,1
并与无效输入没有问题:
GTM>K ARRAY
GTM>D SEARCH^ZZTEST("ARRAY","Apple")
GTM>D SEARCH^ZZTEST("ARRAY","")
GTM>D SEARCH^ZZTEST("ARRAY",)
GTM>D SEARCH^ZZTEST("ARRAY")
GTM>D SEARCH^ZZTEST()
GTM>D SEARCH^ZZTEST("^ZDOESNOTEXIST")
处理“ (“和”)“下标:
GTM>ZWR ARRAY
ARRAY("()")=1
ARRAY("1(")=1
ARRAY("1()")="Orange"
ARRAY("1)")="Apple"
GTM>D SEARCH^ZZTEST("ARRAY","()")
ARRAY("()")=1
"()"
ARRAY("1()")=Orange
"1()"
GTM>D SEARCH^ZZTEST("ARRAY","Apple")
ARRAY("1)")=Apple
"1)"
非常感谢你们!从来不知道编程可能非常有趣。我迫不及待想要变得更加先进。 –