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 команда для распознавания переменной B как string вместо числа (что на мой взгляд неверно).

Любой совет / объяснение будет полезно.

2 ответа

Это может быть ограничением механизма сортировки / хранения, встроенного в 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 TAB (B) = 1
s TAB (B) = 1

до тех пор, пока значение B не меняется между выполнениями, результат должен быть:

TAB ("12168013110012340000000001") = 1

Пример того, что GT.M реализация MUMPS возвращает в вашем случае

Другие вопросы по тегам