0

I $P(GIH,,24)= S $P(GIH,,24)="C" S
上記の MUMPS ステートメントの 2 つの S の意味は?

4

4 に答える 4

2

最初に、元のステートメントは標準の MUMPS でも InterSystems Cache でも GT.M コードでもないと言うことから始めましょう。元々の意味を大まかに推測しても、行の最後の S は MUMPS で行うようなものではありません。単一の S は SET コマンドである可能性がありますが、どの変数を割り当てることができるか、またはそれにどの値を割り当てる必要があるかを示す引数はまだありません。

私の返信の残りの部分は、それが何を意味していたのかを理解しようとしています.

あなたの質問は、いくつかのソフトウェアによって壊れているようです。それをstackoverflowまたはカットアンドペーストプロセスでここに配置します:

私が見た:

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

上記の MUMPS ステートメントの 2 つの S の意味は何ですか?

引用符がどこにあり、質問の送信によって削除された可能性のある引用符を仮定する必要があるため、あなたが何を意味しているのかを理解するのは困難です.

まず、合理的だと推測できることをしましょう。$P は通常、組み込み (組み込み) 関数 $PIECE の省略形です。単独の I はおそらく IF コマンドであり、単独の S はおそらく SET コマンドです。MUMPSコードの行の形式はCOMMAND COMMAND-ARGUMENTであるため、これはあなたの例で問題になります。

余談: また、テキスト COMMAND-ARGUMENT を「山かっこ」に入れようとしました。つまり、単語の先頭に小なり文字を、最後に大なり文字を付けました。テキスト COMMAND-ARGUMENT が消えました。つまり、stackoverflow はそれを HTML マークアップとして認識します。この編集ウィンドウの上部にコード マーカーがあることに気付きましたが、これが役立つ場合とそうでない場合があります。

上記のコードを展開すると、次のようになります。

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

最後の S を展開すると、SET コマンドのように見えますが、set-argument はありません。

これがキャッシュ システムにあった場合、標準 MUMPS では許可されていない、キャッシュによって許可された余分なスペースの例があるかもしれないことに注意してください。つまり、S は IF コマンドの等価演算子の右辺であった可能性があります。これは、Cache が SET コマンドの引数を実際の SET コマンドなしでコードに入れることを許可している場合にのみ意味があります。すなわち:

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

$PIECE 組み込み関数の連続する 2 つのコンマを処理する必要があります。現在、不足している引数を示すために 2 つのカンマを続けて使用することは、組み込み関数を使用する場合ではなく、プログラマが作成したコードでのみ許可されています。したがって、これは、あなたが何を意味したか、または最初に貼り付けられたかを推測できる場所である可能性があります.

二重引用符を入れると、$PIECE コマンド (区切り文字に基づいて文字列を分離する) が、2 番目の引数として指定された長さゼロの引用符付き文字列を持つという問題に遭遇します。これは、空の引数を持つのと同じくらい間違っています。

したがって、山かっこを含む引用符付き文字列を仮定すると、元の行に対して次のようになります。

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

注: コード マーカーを使用すると、行が HTML であると想定されないように、グレイブ アクセントを使用できるようになるのを見たところです。グレイブ アクセントは MUMPS コーディングで使用される文字ではないため、これは良いことです。

別の返信で言及されているように、SET-$PIECE-ARGUMENT フォームは、特定の区切られた部分文字列の場所でデータベースに保存されているデータを変更するために使用されます。

したがって、このコードは推測には問題ないかもしれませんが、実行したこと、実行しなかったこととはかけ離れています。ですから、これがあなたが望んでいたものに近いというフィードバックが得られるまで、ここで停止します. 最初に言ったように、これはまだ完全に有効なコードではありません。

于 2012-05-12T22:42:28.697 に答える
1

Intersystems Caché ではこの構文を別の方法で処理しているのかもしれませんが、そのコードを Caché で試してみると、構文エラーが発生します。それが有効な MUMPS の他のバージョンがあるかもしれませんが、そうではないと思います。

于 2011-04-21T22:04:16.247 に答える
1

これはかなり奇妙ですが、私が考えていることは次のとおりです。

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

2 番目の引数 null を指定して $PIECE を呼び出すと、文字列全体が、割り当てた値 (この場合も null) に置き換えられます。これは、GIH の値をクリアし、制御が次の SET ステートメントに流れ込むのを許可する複雑な方法のように見えます。ただし、$PIECE が $T フラグを設定することを真剣に疑っています。つまり、これを IF 演算子の条件として呼び出すと、おそらく意図したとおりに機能しないということです。

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

次のステートメントは、最初のステートメントとよく似ています。つまり、GIH 全体を "C" に置き換えます。

S

最後のSETは有効なMUMPSではないと思います。

これが次のように書かれていない理由は、私にはわかりません。

s GIH="C"

それが役立つことを願っています!

于 2011-04-06T13:17:13.690 に答える