I $P(GIH,,24)= S $P(GIH,,24)="C“S
以上MUMPS语句中的两个S是什么意思?
发布于 2012-05-13 06:42:29
让我首先说明原始语句既不是标准MUMPS,也不是InterSystems缓存,也不是GT.M代码。即使从广义上猜测它的本意,最后的S也不是你在流行性出血热中会做的事情。一个S可以是一个SET命令,但是您仍然没有任何参数来告诉您可以分配什么变量,或者应该为它分配什么值。
我接下来的回答是试图弄清楚它可能是什么意思。
你的问题似乎被一些软件打破了。无论是在stackoverflow上,还是在这里的剪切和粘贴过程中:
我看到:
I $P(GIH,,24)= S $P(GIH,,24)="C“S
以上MUMPS语句中的两个S是什么意思?
很难弄清楚你的意思,因为这需要假设引号可能在哪里,以及哪些引号可能已经通过问题的传输被删除。
首先,让我们做一些我们可以猜测是合理的事情。$P通常是内置(内在)函数$PIECE的缩写。单独的I可能是一个IF命令,单独的S可能是一个SET命令。这在您的示例中遇到了问题,因为一行MUMPS代码的格式是COMMAND-ARGUMENT。
旁注:我还尝试将文本命令参数放在“尖括号”中,即:在单词的开头使用小于号字符,在结尾使用大于号字符。文本命令参数消失了。这意味着stackoverflow将其视为HTML标记。我注意到在这个编辑窗口的顶部有一个代码标记,这可能会有帮助,也可能没有帮助。
如果我们对上面的代码进行扩展,我们会得到:
如果$PIECE(GIH,,24)=设置$PIECE(GIH,,24)="C“设置
当我们展开最后的S时,它看起来像一个SET命令,但没有任何set参数。
注意,如果这是在缓存系统中,我们可能会有一个缓存允许的额外空格的示例,这在标准MUMPS中是不允许的,即S可能是if命令中相等运算符的右侧。只有当Cache还允许SET命令的参数在没有实际SET命令的代码中出现时,这才有意义。即:
如果$PIECE(GIH,,24)=S $PIECE(GIH,,24)="C“设置
对于$PIECE内部函数,我们仍然需要处理一行中的两个逗号。目前,只有在程序员编写的代码中才允许在一行中使用两个逗号来指示缺少的参数,而在使用内置函数时则不允许。所以这可能是一个我们可以猜测你的意思的地方,或者是最初粘贴进来的地方。
如果我们放入双引号,我们就会遇到这样的问题:$PIECE命令(根据分隔符分隔字符串)将给出一个长度为零的带引号的字符串作为它的第二个参数。这就像有一个空的参数一样错误。
因此,如果我们假设一个带有尖括号的带引号的字符串,我们将为您的原始行得到以下内容:
IF $PIECE(GIH,"<something>",24)="<something>" SET $PIECE(GIH,"<something>",24)="C" SET
注意:我刚刚看到Code标记允许使用严重的重音,以避免假设一行是HTML -这很好,因为严重的重音不是MUMPS编码中使用的字符。
正如在另一个回复中提到的,SET-$ form ARGUMENT形式用于更改存储在数据库中特定分隔子字符串位置的数据。
因此,这段代码可能可以用于猜测,但它已经超出了您可能做过或可能没有做过的范围。所以我现在停止,直到我们得到反馈,这甚至接近你想要的。正如我在一开始所说的,这仍然不是非常有效的代码。
发布于 2011-04-06 21:17:14
这很奇怪,但我认为是这样的:
I $P(GIH,<null>,24)=<null>使用第二个参数null调用$PIECE会将整个字符串替换为您所赋值的值,在本例中,该值也为null。它看起来像是一种复杂的方式来清除GIH的值,并允许控制流到下面的SET语句中。不过,我严重怀疑$PIECE是否设置了$T标志,这意味着将其作为IF运算符的条件调用可能不会以您希望的方式工作。
S $P(GIH,,24)="C"下一条语句与第一条语句非常相似--将整个GIH替换为"C“。
S我不认为最后一组是有效的流行性出血热。
我不明白为什么这不是这样写的:
s GIH="C"希望这能有所帮助!
发布于 2011-04-22 06:04:16
也许Intersystems Caché以不同的方式处理这种语法,但当我在Caché中尝试它时,该代码会导致语法错误。也许还有其他版本的流行性胃炎是有效的,但我不认为它是有效的。
https://stackoverflow.com/questions/5376267
复制相似问题