吵吵   2017-10-12  阅读:4,290

在国外大行其道的cache数据库,在中国用者了了,除了东华、美康之外,还没有看到其它公司使用。

最近罗氏流水线的的infinity软件倒是也用的cache的数据库。

废话不说,cache的M语言是用于数据库层面的一种脚本语言,类似于SQL数据库时代的存储过程。当然,既然作为一种语言,能用的就太多了,最主要的还是和数据库嵌合的很好。

此M语言还是要和matlab的m语言相区别,估计是因为写的代码都保存为mac,所以就叫M语言了。

我们今天要来研究M语言的for循环,这几乎是编程用到最多的一个玩意。

IsMZE602Prioty(epis)
s epis=$g(epis)
s machine=””
s ret=0
s ts=”” f s ts=$o(^TEPI(epis,1,ts)) q:ts=”” d
.i ret=1 q
.s tscnt=”” f s tscnt=$o(^TEPI(epis,1,ts,tscnt)) q:tscnt=”” d
..i ret=1 q
..s machine=$p(^TEPI(epis,1,ts,tscnt),”\”,27)

..s hosp=0
..s seq=”” f s seq=$o(^TTAB(“TS”,ts,hosp,seq)) q:seq=”” d
…i ret=1 q
…s testCode=$p(^TTAB(“TS”,ts,hosp,seq),”\”,8)

…i machine=”AE6023″ d
….i testCode=”B0049″ s ret=1
….i testCode=”C0135″ s ret=1
….i testCode=”C0156″ s ret=1

q ret

上面一段代码是通过epis 即条码来判断是否有三个报告项目中的任何一个,有则返回1,无则0

因此我们要解决问题就是找到三个项目中的任意一个就返回,并且所有循环都要退出。

我们来研究 for循环的代码
.s tscnt=”” f s tscnt=$o(^TEPI(epis,1,ts,tscnt)) q:tscnt=”” d
..i ret=1 q

先解释下$o函数:按照指定的方向返回一个变量的上一个或下一个索引

我为什么会要加一个i ret=1 q 呢?

因为每一个q都只能退出当前的循环,如果我们不在每一个循环里面都加上这句的话,那么程序要跑完所有的循环才退出,极其的浪费资源!

我在说明上找到q: 可以直接退出该函数,类似c#的return,仿佛看到希望,写上

i testCode=”B0049″ s ret=1 q:ret

没什么用!还是只退出了一层循环!

结论:处理好m语言的for循环,可以让程序跑的更快哦,不过代码写起来真的有点笨。

最后发现Termial还有个bug,输出的字符创加上换行符就只显示最后一行!

比如: 你_$c(13)_好

就显示一个“好”字,还以为我哪里写错了!坑。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

一条回应:“Cache数据库M语言之for循环”

  1. 新手学习中。。。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注