do ^GETPPGINFO("pdf","options","outfile")
これらの引数は以下のとおりです。
-
pdf はプロセス ID または * ワイルドカードにすることができます。
-
options は次の文字列のあらゆる組み合わせにすることができます。
-
b (バイト数で値を返す)
-
Mnn (nn 個以上のブロックを使用するプロセス・プライベート・グローバルがあるプロセスのみをリストする)
プロセス・プライベート・グローバルがないプロセスをリストに含めるには M0 を使用します。
プロセス・プライベート・グローバルがないプロセスはリストから除外し、グローバル・ディレクトリ・ブロックのみがあるプロセスを含めるには M1 を使用します (これが既定です)。
プロセス・プライベート・グローバルがないプロセスをリストから除外し、グローバル・ディレクトリ・ブロックのみがあるプロセスも除外するには M2 を使用します。
-
S (outfile と共に使用して画面表示を抑制)
-
T (プロセスの合計数のみを表示)
-
outfile は、^GETPPGINFO 出力を受け取る CSV (コンマ区切り値) 形式ファイルのファイル・パスです。
次の例では、プロセス・プライベート・グローバルを ppgout という名前の出力ファイルに書き込みます。S オプションで画面表示を抑制し、出力を 500 ブロック以上使用するプロセス・プライベート・グローバルがあるプロセスのみを M500 オプションで表示します。
NEW $NAMESPACE
SET $NAMESPACE="%SYS"
DO ^GETPPGINFO("*","SM500","/home/myspace/ppgout")
グローバル
グローバルは、InterSystems IRIS データベースに自動的に格納される特殊な変数です。これは固有のネームスペースにマッピングされるので、拡張参照を使用しない限り、そのネームスペース内でのみアクセスできます。グローバルは任意のプロセスからアクセスできます。グローバルは、そのグローバルを作成したプロセスの終了後も存続します。グローバルは、明示的に削除されるまで存続します。
InterSystems IRIS では、グローバルの SET と KILL は、ジャーナル化されたトランザクション・イベントとして扱われます。このようなイベントでは、トランザクションをロールバックすると、これらの処理が取り消されて元の状態に戻ります。グローバルに対する変更に他のプロセスからアクセスできないように、変更したトランザクションがコミットされるまでロックを使用できます。詳細は、“トランザクション処理” の章を参照してください。
ObjectScript プログラムでは、他の変数と同様にグローバルを使用できます。グローバル名は、構文的に “^” 文字を文字またはパーセント “%” 記号の前に置いて区別します。
SET mylocal = "This is a local variable"
SET ^myglobal = "This is a global stored in the current namespace"
グローバルの命名規約は、以下のとおりです。
-
グローバルは、グローバル接頭語とグローバル名で構成されています。グローバル接頭語は、通常、キャレット (^) 文字で、現在のネームスペースでのグローバルであることを指定します。グローバル接頭語は、^|"samples"| などの拡張参照とすることもでき、この場合は別のネームスペースでのグローバルであることを指定します。
-
グローバル名は、有効な識別子である必要があります。(接頭語の文字の後の) 最初の文字は必ず、文字、もしくはパーセント記号 (%) のいずれかです。“%Z” または “%z” で始まるパーセント変数のみがアプリケーション・コードで使用できます (^%zmyglobal や ^%Z123 など)。これらの ^%Z グローバルと ^%z グローバルは IRISSYS データベースに書き込まれるので、InterSystems IRIS のアップグレードを経ても保持されます。その他すべてのパーセント変数は、規則に従ってシステムで使用するために予約されています。この規則の詳細は、"サーバ側プログラミングの入門ガイド" の “識別子のルールとガイドライン” を参照してください。
グローバル名の 2 番目およびその後に続く文字は、文字、数字、ピリオド記号 (.) になります。ピリオドを、名前の最初または最後の文字にすることはできません。
-
グローバル名には、Unicode 文字 (ASCII 255 よりもコード値が大きい文字) を使用できません。グローバル名に Unicode 文字を使用すると <WIDE CHAR> エラーが発生します。
-
グローバル名は、大文字と小文字を区別します。
-
グローバル名は、そのネームスペース内で重複しないようにします。
-
グローバル名は、接頭語を除き最大 31 文字です。31 文字より長い名前を指定することもできますが、最初の 31 文字のみが使用されます。このため、グローバル名は最初の 31 文字内で一意である必要があります。
-
グローバルに添え字を使用できます。添え字を使用することで、グローバルを値の配列として定義できます。 添え字は数字または文字列とすることができ、Unicode 文字も使用できます。添え字の規約や添え字レベルの数に対する制約など、添え字の使用に関する情報については、"グローバルの使用法" の "グローバル構造" を参照してください。
-
インターシステムズで使用する目的で保持されているグローバル名もあります。詳細は、"サーバ側プログラミングの入門ガイド" の “回避する必要があるグローバル変数名” を参照してください。
または、グローバルは、カレット文字のすぐ後に垂直バーまたは角括弧のペアを使用して、ネームスペースやディレクトリを定義する拡張参照を指定できます (^|"samples"|myglobal または ^|""|myglobal など)。これらの拡張グローバル参照をプロセス・プライベート・グローバルと混同しないでください。
$ZREFERENCE 特殊変数を使用して、最後に使用されたグローバルの名前を特定できます。$QSUBSCRIPT 関数を使って、指定したグローバルのコンポーネントを返したり、$QLENGTH 関数を使って、添え字の層の数を返すことができます。
グローバルの詳細は、"グローバルの使用法" を参照してください。
特殊変数
ObjectScript には、特定のシステム情報をアプリケーションで有効にするために使用する組み込み特殊変数 (システム変数ともいいます) が多数あります。特殊変数はすべて InterSystems IRIS で供給される変数で、“$” 記号の接頭辞を使用した名前を使用します。ユーザがその他の特殊変数を定義することはできません。特殊変数一式をマッピングすると、すべてのネームスペースからアクセスできます。
その値は、ユーザの現在の動作環境に合わせて設定されます。特殊変数の一部は、はじめ NULL 文字列 ("") に設定されているため、特殊変数を参照しても <UNDEFINED> エラーは生成されません。特殊変数の値は現在のプロセスに固有のもので、別のプロセスからアクセスできません。
ユーザは、SET コマンドを使用して一部の特殊変数を設定できますが、それ以外の特殊変数をユーザが変更することはできません。詳細は、個々の特殊変数を参照してください。
次の例では、特殊変数 $HOROLOG を使用します。
SET starttime = $HOROLOG
HANG 5
WRITE !,$ZDATETIME(starttime)
WRITE !,$ZDATETIME($HOROLOG)
特殊変数 $HOROLOG は、現在のシステムの日付と日時を格納します。SET コマンドはこの特殊変数を使用して、ユーザ定義のローカル変数 starttime にこの値を設定します。HANG コマンドは、プログラムを 5 秒間停止します。最後に、2 つの $ZDATETIME 関数は、starttime と現在のシステムの日付と時間をユーザが読み取れる形式で返します。
以下はその他の特殊変数の例です。
WRITE !,"$JOB = ",$JOB // Current process ID
WRITE !,"$ZVERSION = ",$ZVERSION // Version info
多くの特殊変数は読み取り専用で、SET コマンドを使用して設定することができません。$DEVICE などのその他の特殊変数は、読み取り/書き込み可能で、SET コマンドで設定できます。
特殊変数には、添え字を使用できません。特殊変数は、$INCREMENT 関数を使用してインクリメントすることや KILL コマンドを使用して削除することができません。特殊変数は、"ObjectScript の使用法" の “コマンド” の章の "表示 (書き込み) コマンド" で説明するように、WRITE、ZWRITE、ZZWRITE、または ZZDUMP コマンドを使用して表示できます。
特殊変数のリストと詳細説明は、"ObjectScript リファレンス" を参照してください。
変数のタイプと変換
ObjectScript の変数には決まった形式はありません。つまり、特定のデータ型はありません (これは、JavaScript、VBScript、および Document Data Base/JSON にも当てはまります)。したがって、文字列値を変数に割り当て、その後同じ変数に数値を割り当てることができます。最適化として、InterSystems IRIS は文字列、整数、数字、オブジェクトに異なる内部表現を使用しますが、アプリケーション・プログラマからは見えません。InterSystems IRIS は、使用されるコンテキストを基にして、変数の値を自動的に変換 (または解釈) します。
以下はその例です。
// set some variables
SET a = "This is a string"
SET b = "3 little pigs"
SET int = 22
SET num = 2.2
SET obj = ##class(Sample.Person).%New()
// Display them
WRITE "Here are the variables themselves: ",!
WRITE "a: ",a,!
WRITE "b: ",b,!
WRITE "int: ",int,!
WRITE "num: ",num,!
WRITE "obj: ",obj,!,!
// Now use them as other "types"
WRITE "Here are the numeric interpretation of",!
WRITE "a, b, and obj: ",!
WRITE "+a: ",+a,!
WRITE "+b: ",+b,!
WRITE "+obj: ",+obj,!,!
WRITE "Here are concatenations of int and num:",!
WRITE "Concatenating int: ","I found " _ int _ " apples.",!
WRITE "Concatenating num: ","There are " _ num _ " pounds per kilogram.",!
InterSystems IRIS は、以下のように値を変換します。
ObjectScript の型の変換規則
変換元 |
変換先 |
規則 |
番号 |
文字列 |
数値を表す文字列が使用され、前の例では変数 num は 2.2 のようになります。 |
文字列 |
数値 |
文字列の先頭文字は数値リテラルとして解釈されます。これについては、“演算子と式” の章の “文字列から数値への変換” のセクションで説明しています。例えば、“–1.20abc” は -1.2 と解釈され、“abc123” は 0 と解釈されます。 |
オブジェクト |
数値 |
指定されたオブジェクト参照の内部オブジェクト・インスタンス番号が使用されます。その値は整数です。 |
オブジェクト |
文字列 |
n@cls 形式の文字列が使用されます。n は内部オブジェクトのインスタンス番号で、cls は指定されたオブジェクトのクラス名です。 |
数値 |
オブジェクト |
許可されていません。 |
文字列 |
オブジェクト |
許可されていません。 |
変数の宣言
他の言語と異なり、ObjectScript で変数を宣言する必要はありません。ただし、#dim プリプロセッサ指示文をコードの記述の補助として使用できます。
スタジオでコードを記述する場合は、#dim プリプロセッサ指示文を使用できます。#dim は、対象変数タイプについての情報を提供します。スタジオは、スタジオ・アシスト機能と共にこの情報を使用してコードを処理します。この情報は、ドキュメントに使用することも、コードを参照する可能性のある他のユーザに提供することもできます(スタジオ・アシストに関する詳細は、"スタジオの使用法" の “スタジオ・オプションの設定” の章の “エディタ・オプション” のセクションを参照してください)。
#dim の構文形式は、以下のとおりです。
#dim VariableName As DataTypeName
#dim VariableName As List Of DataTypeName
#dim VariableName As Array Of DataTypeName
ここで、VariableName は、データ型を指定する変数で、DataTypeName は、そのデータ型を指定します。スタジオには、DataTypeName の値を選択できるメニューが用意されています。
#dim では、以下のように変数の初期値を指定することもできます。
#dim President As %String = "Obama"