4

我正在尝试将 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将变量识别Bnumber(错误转换),然后SET将变量识别Bstring(我想看到)。我的问题是如何编写SET命令将变量识别Bstring数字而不是数字(我认为这是错误的)。

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

4

2 回答 2

5

这可能是 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

于 2014-08-22T00:34:37.480 回答
0

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

s TAB(B)=1
s TAB(B)=1

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

制表符(“12168013110012340000000001”)=1

在您的情况下,MUMPS 的 GT.M 实现返回的示例

于 2016-11-27T06:14:30.340 回答