Запрос в операторе MUMPS - PullRequest
       38

Запрос в операторе MUMPS

0 голосов
/ 21 марта 2011

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

Ответы [ 4 ]

2 голосов
/ 13 мая 2012

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

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

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

Я видел:

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

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

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

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

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

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

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

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

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

IF $ ЧАСТЬ (GIH ,, 24) = S $ ЧАСТЬ (GIH ,, 24) = "C" SET

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

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

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

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

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

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

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

1 голос
/ 22 апреля 2011

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

1 голос
/ 06 апреля 2011

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

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

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

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

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

S

Я не думаю, что последний SET является действительным MUMPS.

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

s GIH="C"

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

0 голосов
/ 08 января 2019

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

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


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

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


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

GIH = 256 ^^^ 42 ^^^^ Mike ^^^^^^^^^^^^^^^ P ^^^


, что сделало бы это значение TRUE:

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


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


GIH будет:

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


, тогда будет установлена ​​переменная UPDATEFLG = 1

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

...