MUMPS 无法将数字格式化为字符串



我正在尝试在MUMPS中将大数转换为字符串,但我不能。

让我解释一下我想做什么:

s A="TEST_STRING#12168013110012340000000001"
s B=$P(A,"#",2)
s TAB(B)=1
s TAB(B)=1

我想创建一个数组TAB,其中变量B将是数组TAB的主键。

当我执行ZWR时,我将得到

A="TEST_STRING#12168013110012340000000001"
B="12168013110012340000000001"
TAB(12168013110012340000000000)=1
TAB("12168013110012340000000001")=1

可以看到,第一个SET将变量B识别为number(错误转换),第二个SET将变量B识别为string(正如我想看到的)。我的问题是如何编写SET命令来识别变量Bstring而不是数字(这在我看来是错误的)。

任何建议/解释都会有帮助的。

这可能是内置于MUMPS中的排序/存储机制的限制,并且在不同的MUMPS实现之间是不同的。原因是,虽然MUMPS中的变量值是非类型化的,但索引值是——并且数字索引在字符串索引之前排序。将大字符串转换为数字时,可能会出现舍入错误。为了防止这种情况发生,您需要在索引中的数字前添加一个空格,以显式地将其视为字符串:

s TAB(" "_B)=1

据我所知,Intersystems Cache没有这个限制——至少你的代码在Cache中工作得很好,在文档中他们声称支持最多309个数字:

http://docs.intersystems.com/cache20141/csp/docbook/DocBook.UI.Page.cls?KEY=GGBL_structure GGBL_C12648

我试图重新创建您的场景,但我没有看到您遇到的问题。在我看来,立即执行同一个命令(一次接一次地执行)实际上不可能产生两个不同的结果。

s选项卡(B) = 1
s选项卡(B) = 1

只要B的值在两次执行之间没有改变,结果应该是:

选项卡("12168013110012340000000001")= 1

在您的例子中,GT.M实现的MUMPS返回的示例

相关内容

  • 没有找到相关文章

最新更新