Запрос в заявлении MUMPS

I $ P (GIH ,, 24) = S $ P (GIH ,, 24) = "C" S
Что означают два S в приведенном выше утверждении MUMPS?


person Sanatan    schedule 21.03.2011    source источник


Ответы (4)


Позвольте мне начать с того, что исходный оператор НЕ является ни стандартным кодом MUMPS, ни InterSystems Cache, ни кодом GT.M. Даже если предположить, что изначально имелось в виду, последняя буква S на линии - это не то, что вы сделали бы в MUMPS. Один S может быть командой SET, но у вас все еще нет аргументов, указывающих, какая переменная может быть назначена или какое значение ей следует присвоить.

Остальная часть моего ответа пытается понять, что это могло означать.

Кажется, ваш вопрос нарушен каким-то программным обеспечением. либо это в stackoverflow, либо в процессе вырезания и вставки, чтобы поместить его здесь:

Я видел:

I $ P (GIH ,, 24) = S $ P (GIH ,, 24) = "C" S

Что означают две буквы S в приведенном выше заявлении MUMPS?

Трудно понять, что вы имели в виду, поскольку это потребовало бы предположения, где могут быть кавычки, а какие могут быть удалены при передаче вопроса.

Прежде всего, давайте сделаем то, что мы можем предположить разумным. $ P обычно является аббревиатурой от встроенной (внутренней) функции $ PIECE. стоящее отдельно I, вероятно, является командой IF, а стоящее отдельно S, вероятно, является командой SET. Это приводит к проблеме с вашим примером, потому что формат строки кода MUMPS - КОМАНДА КОМАНДА-АРГУМЕНТ.

Примечание: я также просто попытался поместить текст КОМАНДА-АРГУМЕНТ в «угловые скобки», то есть: с символом «меньше» в начале слова и символом «больше» в конце. Текст КОМАНДА-АРГУМЕНТ просто исчез. Это означает, что stackoverflow видит его как разметку HTML. Я заметил, что вверху этого окна редактирования есть маркер кода, который может помочь, а может и не помочь.

Если мы сделаем расширения к приведенному выше коду, мы получим:

IF $ PIECE (GIH ,, 24) = SET $ PIECE (GIH ,, 24) = "C" SET

Когда мы расширяем последний S, но он выглядит как команда SET, но без какого-либо аргумента set.

Обратите внимание: если бы это было в системе кэширования, у нас мог бы быть пример дополнительных пробелов, разрешенных кешем, которые не разрешены в стандартных MUMPS, т.е. S, возможно, была правой частью оператора равенства в команде IF. Это имело бы смысл только в том случае, если бы Cache также позволял аргументу команды SET находиться в коде без реальной команды SET. то есть:

IF $ PIECE (GIH ,, 24) = S $ PIECE (GIH ,, 24) = "C" УСТАНОВИТЬ

Нам все равно придется иметь дело с двумя запятыми подряд для внутренней функции $ PIECE. В настоящее время использование двух запятых подряд для обозначения отсутствующего аргумента разрешено только в коде, написанном программистом, но не при использовании встроенных функций. Так что это может быть место, где мы сможем угадать, что вы имели в виду или изначально вставили.

Если мы заключим двойные кавычки, мы столкнемся с проблемой, что команда $ PIECE (которая разделяет строку на основе разделителя) будет иметь строку в кавычках нулевой длины, заданную в качестве второго аргумента. Что так же ошибочно, как и пустой аргумент.

Итак, если мы выдвинем гипотезу о строке в кавычках с угловыми скобками, мы получим что-то такое для вашей исходной строки:

IF $PIECE(GIH,"<something>",24)="<something>" SET $PIECE(GIH,"<something>",24)="C" SET

Примечание: я только что видел, что маркер кода позволяет использовать серьезные акценты, чтобы не предполагать, что строка является HTML - что хорошо, поскольку серьезный акцент не является символом, используемым в кодировании MUMPS.

Как было упомянуто в другом ответе, форма SET- $ PIECE-ARGUMENT используется для изменения данных, хранящихся в базе данных в определенном месте подстроки с разделителями.

Таким образом, этот код может быть хорошим для предположений, но он ушел далеко за пределы того, что вы могли или не могли сделать. Так что я остановлюсь, пока мы не получим ответ, что это даже близко к тому, что вы хотели. Как я уже сказал вначале, это все еще не совсем верный код.

person David Whitten    schedule 12.05.2012

Это довольно странно, но я думаю, что происходит следующее:

I $P(GIH,<null>,24)=<null>

Вызов $ PIECE со вторым аргументом null заменит всю строку присвоенным вами значением, которое в данном случае также равно null. Это похоже на запутанный способ очистить значение GIH и разрешить передачу управления в следующий оператор SET. Я серьезно сомневаюсь, что $ PIECE устанавливает флаг $ T, что означает, что вызов этого условия в качестве условия для оператора IF, вероятно, не работает так, как вы этого хотите.

S $P(GIH,,24)="C"

Следующее утверждение очень похоже на первое - замените GIH целиком на «C».

S

Я не думаю, что последний НАБОР действителен MUMPS.

Я не понимаю, почему это не написано следующим образом:

s GIH="C"

Надеюсь, это поможет!

person TIMOOOO    schedule 06.04.2011

Возможно, Intersystems Caché по-другому обрабатывает этот синтаксис, но этот код приводит к синтаксической ошибке, когда я пробую его в Caché. Могут быть и другие версии MUMPS, для которых это верно, но я не думаю, что это так.

person lecrank    schedule 21.04.2011

Как отмечали другие, это утверждение недействительно, похоже, что части отсутствуют

Но S - это команда SET в Mumps


Вот как может выглядеть подобное утверждение:

I $ P (GIH, "^", 24) = "P" S $ P (GIH, "^", 24) = "C" S UPDATEFLG = 1


в этом случае GIH может выглядеть примерно так:

GIH = 256 ^^^ 42 ^^^^ Майк ^^^^^^^^^^^^^^^^ P ^^^


что сделало бы это значение ИСТИННЫМ:

I $ P (GIH, "^", 24) = "P"


поэтому после: S $ P (GIH, "^", 24) = "C"


GIH будет:

GIH = 256 ^^^ 42 ^^^^ Майк ^^^^^^^^^^^^^^^^ C ^^^


тогда он установит переменную UPDATEFLG = 1

Надеюсь это поможет :-)

person Augie    schedule 08.01.2019