ZWRITE (ObjectScript)
構文
ZWRITE:pc expression,...
ZW:pc expression,...
引数
引数 | 説明 |
---|---|
pc | オプション — 後置条件式 |
expression | オプション — 表示する変数または式、変数のコンマ区切りリスト、または表示する式のいずれかまたはすべて。コンマ区切りリストには、任意の組み合わせの変数と式を含めることができます。 |
概要
ZWRITE コマンドは、変数の名前とその値をリストします。これらの変数とその子孫を、現在のデバイスに 1行に 1 変数ずつ、正規順序の varname=value 形式でリストします。ZWRITE は、式の値もリストします。式は、値 として、1 行に 1 つずつ、指定された順序でリストされます。ZWRITE コマンドには、以下の 2 つの基本形式があります。
ZWRITE は、オプションの後置条件式を指定できます。InterSystems IRIS は、後置条件式が True (0 以外の数値に評価される) の場合にコマンドを実行します。InterSystems IRIS は、後置条件式が False (0 に評価される) の場合はコマンドを実行しません。詳細は、"コマンド後置条件式" を参照してください。
ZWRITE リストは、CTRL-C を発行すると中断され、<INTERRUPT> エラーが発生することがあります。
引数なしの ZWRITE
expression 引数なしの ZWRITE は、引数なしの WRITE と機能的に同じです。これは、プライベート変数を含むローカル変数環境 (ローカル変数) のすべての変数の名前と値を表示します。プロセス・プライベート・グローバルまたは特殊変数は表示しません。ASCII 順で名前ごとに変数をリストします。添え字ツリー順で添え字付き変数をリストします。
引数なしの ZWRITE は、ローカル変数に割り当てられた OREF 値を variable=<OBJECT REFERENCE>[oref] として表示します。JSON 配列または JSON オブジェクトに設定されたローカル変数でも、同じ結果が表示されます。OREF についてのさらなる詳細は表示されません。OREFの詳細は、"OREF の基本" を参照してください。
引数なしの ZWRITE は、ローカル変数に割り当てられたビット文字列を圧縮文字列として表示します。これは、(非表示文字を含むため) 空の文字列のようになる場合があります。ビット文字列についてのさらなる詳細は表示されません。
詳細は、"WRITE" コマンドを参照してください。
引数付きの ZWRITE
引数付きの ZWRITE は、1 つの expression 引数またはコンマ区切りの expression 引数リストを指定できます。これらの引数は、左から右の順に評価されます。各引数は、変数または式を指定できます。expression がコンマ区切りのリストである場合、各変数または式は個別の行に表示されます。
-
変数:varname=value として表示されます。
-
式:評価され、その結果が value として表示されます。
-
特殊変数:value として表示されます。
-
InterSystems IRIS リスト構造:$lb(element1,element2) として表示されます。
-
添え字付きグローバルは、SQL データ値や SQL インデックス値の格納に使用されるものを含め、$lb() リスト構造として表示されます。
-
オブジェクト参照:<OBJECT REFERENCE>[oref] として表示されます。これは、引数なしの ZWRITE によって表示される値です。オブジェクト参照引数付きの ZWRITE は、この値に加えて追加の “一般情報”、“属性値”、および (該当する場合には) “スウィズル参照” と “計算参照” の情報を表示します。
-
JSON 配列と JSON オブジェクト:JSON 値として表示されます。
-
ビット文字列:$ZWCHAR 圧縮バイナリ文字列と、ビット文字列のすべての "1" ビットのユーザが読み取れる形式の両方として表示されます。
ZWRITE は、1 つまたは複数の非数字文字を含む文字列を引用符付き文字列として表示します。
ZWRITE は、キャノニック形式の数として数値を表示します。ZWRITE は、キャノニック形式の数字を含む数値文字列を引用符なしのキャノニック形式の数として表示します。ZWRITE は、キャノニック形式でない数値文字列を引用符付きの文字列として表示します。キャノニック形式でない数値文字列に対して算術演算を行うと、文字列がキャノニック形式の数に変換されます。詳細は、以下の例を参照してください。
SET numcanon=7.9 // returns number
SET num=+007.90 // returns number
SET strnum="+7.9" // returns string
SET strcanon="7.9" // returns number
SET strnumop=+"+7.90" // returns number
ZWRITE numcanon,num,strnum,strcanon,strnumop
ZWRITE は、長すぎる文字列の表示を切り捨て、文字列表示が切り捨てられていることを示す ... を追加します。
ZWRITE は、制御文字 ($LISTBUILD および $BIT を使用して作成されたものを含む) を含む値を、読みやすい形式で表示します。この書式設定が、最大文字列長を超える、長すぎる文字列値の原因になる場合、ZWRITE は表示される文字列を切り捨て、文字列が切り捨てられていることを示す ... を追加します。
ZWRITE と、WRITE、ZZDUMP、および ZZWRITE コマンドとの比較は、"表示 (書き込み) コマンド" を参照してください。
変数
expression が変数である場合、ZWRITE は varname=value を別個の行に書き出します。変数は、ローカル変数、プロセス・プライベート・グローバル、グローバル変数、またはオブジェクト参照 (OREF) にすることができます。
ZWRITE は未定義の変数は無視します。エラーの発行はしません。コンマ区切りの変数リスト内で未定義の変数を 1 つ以上指定すると、ZWRITE は未定義の変数を無視して、定義された変数を返します。この動作により、複数の変数を、そのすべてが定義済みであるかどうかを判別するための確認なしで表示できます。未定義の変数を WRITE、ZZDUMP、または ZZWRITE に指定すると、InterSystems IRIS は <UNDEFINED> エラーを発行します。
変数には添え字を付けることができます。変数が定義済みのサブノードを持つ場合、ZWRITE は各サブノードに対して varname=value 行を、添え字ツリー順に書き出します。ルート・ノードを指定すると、ZWRITE は、そのルート・ノードが定義されていなくても、そのサブノードをすべて表示します。
拡張グローバル参照を使用して、現在のネームスペースにマップされていないグローバル変数を指定することができます。ZWRITE は、%SYSTEM.ProcessOpens in a new tab クラスの RefInKind()Opens in a new tab メソッドまたは Config.MiscellaneousOpens in a new tab クラスの RefInKindOpens in a new tab プロパティが拡張グローバル参照を削除するために設定されている場合でも、拡張グローバル参照を表示します。存在しないネームスペースを指定した場合、InterSystems IRIS は <NAMESPACE> エラーを発行します。特権を持たないネームスペースを指定した場合、InterSystems IRIS は <PROTECT> エラーを発行し、続けてグローバル名とデータベース・パスを表示します (例:<PROTECT> ^myglobal,c:\intersystems\iris\mgr\)。添え字付き変数と拡張グローバル参照に関する詳細は、"グローバルについての正式な規則" を参照してください。
非表示文字
ZWRITE はすべての表示文字を表示します。非表示文字は $CHAR 関数を使用して表示し、非表示文字それぞれを連結された $c(n) 値として表します。非表示制御文字は実行しません。詳細は、以下の例を参照してください。
SET charstr=$CHAR(65,7,66,67,0,68,11,49,50)
ZWRITE charstr
式
expression がリテラル式である場合、ZWRITE はその式を評価し、結果の value を個別の行に書き出します。式に未定義の変数が含まれている場合、InterSystems IRIS は <UNDEFINED> エラーを発行します。
式が多次元のプロパティである場合、ZWRITE はプロパティの子孫を表示しません。ZWRITE で多次元のプロパティ全体を表示するには、それに MERGE を実行してローカル配列にマージするか、またはオブジェクト全体を表示します。
InterSystems IRIS リスト構造
ZWRITE への InterSystems IRIS リスト構造 (%List) は、変数または式として指定できます。ZWRITE は、リスト構造を $lb(element1,element2) として表示します。詳細は、以下の例を参照してください。
SET FullList = $LISTBUILD("Red","Blue","Green","Yellow")
SET SubList = $LIST(FullList,2,4)
SET StrList = $LISTFROMSTRING("Crimson^Azure^Lime","^")
ZWRITE FullList,SubList,StrList
添え字付きグローバルとその下位ノード
以下は、添え字付きグローバル変数とそのすべての下位ノードの内容を表示する ZWRITE の例です。この例では、SQL テーブルに投影される、Sample.Person 永続クラスに対して定義されたデータを表示します。このグローバル変数は、その名前を永続クラス名 (SQL テーブル名ではありません) から取得し、大文字と小文字を区別します。また、データ・グローバルであることを示すため、"D" が付加されます。下位ノードには、$LISTBUILD ($lb) 構文として表示されるリスト構造が含まれています。
ZWRITE ^Sample.PersonD
単一のデータ・レコードを表示するには、以下に示すように、RowID 値をグローバル添え字として指定できます。
ZWRITE ^Sample.PersonD(22)
インデックスの内容を表示するには、"I" を付加した永続クラス名を指定し、インデックス名を添え字として入力できます。インデックス名では、大文字と小文字が区別されます。
ZWRITE ^Sample.PersonI("NameIDX")
リストで使用されるその他の出力不能文字も表示されます。
以下は、拡張グローバル参照を使用して、指定したネームスペース内の添え字付きグローバル変数の内容を表示する ZWRITE の例です。
ZWRITE ^["USER"]Sample.PersonD
ネームスペース名は、別のネームスペースでも現在のネームスペースでもかまいません。ネームスペース名は、大文字と小文字を区別しません。
$QUERY または $NAME によって返されたグローバルからの拡張グローバル参照を削除するために設定可能な RefInKind メソッドまたはプロパティが設定されているかどうかに関係なく、ZWRITE は常に拡張グローバル参照を表示します。
オブジェクト参照
ZWRITE へのオブジェクト参照 (OREF) は、変数または式のいずれかとして指定できます。オブジェクト参照を指定した場合、ZWRITE は variable=9@%SQL.Statement ; <OREF> や 9@%SQL.Statement ; <OREF> などの値を表示し、一般情報、属性値、および (該当する場合には) オブジェクトのプロパティのスウィズル参照と計算参照も 1 行に 1 属性ずつ表示します。
<OREF> 識別子の接尾語は、ブラウザ・インタフェースを介して ZWRITE を実行したときには、ブラウザが角括弧をタグと解釈するため、表示されない場合があります。
ZWRITE 引数が埋め込みオブジェクト・プロパティである場合、ZWRITE は、コンテナ・プロパティの配列要素の一般的な情報と属性値を、1 行に 1 属性ずつ表示します。表示形式は、%SYSTEM.OBJ.Dump()Opens in a new tab メソッドと同じです。
以下の例では、OREF に続いて "一般情報"、"属性値"、および "スウィズル参照" を表示します。
SET oref = ##class(%SQL.Statement).%New()
ZWRITE oref
以下の例では、OREF に続いて "一般情報"、"属性値"、および "計算参照" を表示します。
SET doref=##class(%iKnow.Domain).%New("mytempdomain")
DO doref.%Save()
SET domId=doref.Id
ZWRITE doref
SET stat=##class(%iKnow.Domain).%DeleteId(domId)
以下の例では、OREF に続いて "一般情報"、"属性値"、"スウィズル参照"、および "計算参照" を表示します。
SET poref=##class(Sample.Person).%OpenId(1)
ZWRITE poref
SET myquery = "SELECT TOP 2 Name,DOB FROM Sample.Person"
SET oref = ##class(%SQL.Statement).%New()
SET qStatus = oref.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = oref.%Execute()
ZWRITE rset
OREFの詳細は、"OREF の基本" を参照してください。
JSON 配列と JSON オブジェクト
引数なしの ZWRITE は、JSON 動的配列と JSON ダイナミック・オブジェクトをオブジェクト参照として表示します。以下に例を示します。
USER>SET jarray = ["apples","oranges"]
USER>SET jobj = {"fruit":"apples","count":24}
USER>ZWRITE
jarray=<OBJECT REFERENCE>[1@%Library.DynamicArray]
jobj=<OBJECT REFERENCE>[2@%Library.DynamicObject]
引数付きの ZWRITE は、JSON 動的配列と JSON ダイナミック・オブジェクトの値を表示します。詳細は、以下の例を参照してください。
JSON 配列:
USER>SET jarray = ["apples","oranges"]
USER>SET jobj = {"fruit":"apples","count":24}
USER>ZWRITE jarray
jarray = ["apples","oranges"] ; <DYNAMIC ARRAY>
USER>ZWRITE jobj
jobj = {"fruit":"apples","count":24} ; <DYNAMIC OBJECT>
引数なしの ZWRITE は、以下の例に示すように OREF 値を JSON オブジェクト内に表示します。
USER>SET oref = ##class(%SQL.Statement).%New()
USER>SET jobj = {"ObjRef":(oref)}
USER>ZWRITE
jobj=<OBJECT REFERENCE>[4@%Library.DynamicObject]
oref=<OBJECT REFERENCE>[6@%SQL.Statement]
JSON オブジェクト OREF 引数付きの ZWRITE は、("6@%SQL.Statement") のような形式を使用して OREF 値を JSON オブジェクト内に表示します。
USER>SET orefsql = ##class(%SQL.Statement).%New()
USER>SET jobjsql = {"ObjRef":(orefsql)}
USER>SET orefrs = ##class(%ResultSet).%New()
USER>SET jobjrs = {"ObjRef":(orefrs)}
USER>ZWRITE jobjsql
jobjsql={"ObjRef":("6@%SQL.Statement")} ; <DYNAMIC OBJECT>
USER>ZWRITE jobjrs
jobjrs={"ObjRef":("7@%Library.ResultSet")} ; <DYNAMIC OBJECT>
オブジェクト参照 (OREF) の詳細は、"OREF の基本" を参照してください。
ZWRITE は、JSON オブジェクト内の $DOUBLE 値を以下のように処理します。
引数なしの ZWRITE
USER>SET jnum = {"doub":($DOUBLE(1.234))}
USER>SET jnan = {"doub":($DOUBLE("NAN"))}
USER>SET jinf = {"doub":($DOUBLE("-INF"))}
USER>ZWRITE
jinf=<OBJECT REFERENCE>[6@%Library.DynamicObject]
jnan=<OBJECT REFERENCE>[5@%Library.DynamicObject]
jnum=<OBJECT REFERENCE>[4@%Library.DynamicObject]
$DOUBLE JSON オブジェクト引数付きの ZWRITE
USER>SET jnum = {"doub":($DOUBLE(1.234))}
USER>SET jnan = {"doub":($DOUBLE("NAN"))}
USER>SET jinf = {"doub":($DOUBLE("-INF"))}
USER>ZWRITE jnum
jnum={"doub":1.2339999999999999857} ; <DYNAMIC OBJECT>
USER>ZWRITE jnan
jnan={"doub":($DOUBLE("NAN"))} ; <DYNAMIC OBJECT>
USER>ZWRITE jinf
jnan={"doub":($DOUBLE("-INF"))} ; <DYNAMIC OBJECT>
ObjectScript 内での JSON の処理の詳細は、"SET コマンド" を参照してください。
ビット文字列
ZWRITE へのビット文字列は、変数または式のいずれかとして指定できます。ZWRITE 引数が ($BIT 関数を使用して作成された) InterSystems IRIS 圧縮ビット文字列である場合、ZWRITE は、圧縮バイナリ文字列の 10 進表現を $ZWCHAR ($zwc) 2 バイト (ワイド) 文字として表示します。
また、ZWRITE は、コンマ区切りリストとして、左から右の順に、圧縮されていない “1” ビットをリストするコメントを表示します。3 つ以上の連続した “1” ビットがある場合は、それらを 2 ドット構文 (n..m) を使用して範囲 (n と m も範囲に含む) としてリストします。例えば、ビット文字列 [1,0,1,1,1,1,0,1] は、/*$bit(1,3..6,8)*/ と表示されます。ビット文字列 [1,1,1,1,1,1,1,1] は、/*$bit(1..8)*/ と表示されます。ビット文字列 [0,0,0,0,0,0,0,0] は、/*$bit()*/ と表示されます。以下の例は、ZWRITE ビット文字列の出力を示しています。
SET $BIT(a,1) = 0
SET $BIT(a,2) = 0
SET $BIT(a,3) = 1
SET $BIT(a,4) = 0
SET $BIT(a,5) = 1
SET $BIT(a,6) = 1
SET $BIT(a,7) = 1
SET $BIT(a,8) = 0
ZWRITE a
例
引数なしの ZWRITE
以下の例では、引数なしの ZWRITE が、定義済みのすべてのローカル変数をASCII 名の順番でリストします。
SET A="A",a="a",AA="AA",aA="aA",aa="aa",B="B",b="b"
ZWRITE
これは、以下を返します。
A="A" AA="AA" B="B" a="a" aA="aA" aa="aa" b="b"
以下の例では、引数なしの ZWRITE が、キャノニック形式およびキャノニック形式でない数値をリストします。
SET w=10
SET x=++0012.00
SET y="6.5"
SET z="007"
SET a=w+x+y+z
ZWRITE
これは、以下を返します。
a=35.5 w=10 x=12 y=6.5 z="007"
引数付きの ZWRITE
以下の例では、ZWRITE は 3 つの変数を varname=value として、それぞれ個別の行で表示します。
SET alpha="abc"
SET x=100
SET y=80
SET sum=x+y
ZWRITE x,sum,alpha
以下の例では、ZWRITE は最初の引数の式を評価します。これは式を value として、変数を varname=value として返します。
SET x=100
SET y=80
ZWRITE x+y,y
以下の例では、さまざまな変数値を表示するときに ZWRITE と WRITE を比較します。ZWRITE は、引用符区切り文字列を返しますが、WRITE は返しません。
SET a=+007.00
SET b=9E3
SET c="+007.00"
SET d=""
SET e="Rhode Island"
SET f="Rhode"_"Island"
ZWRITE a,b,c,d,e,f
WRITE !,a,!,b,!,c,!,d,!,e,!,f
添え字サブノードを表示する ZWRITE
以下は、添え字付きプロセス・プライベート・グローバル変数のコンテンツを表示する ZWRITE の例です。ZWRITE は、変数の添え字を階層順に表示します。
SET ^||fruit(1)="apple",^||fruit(4)="banana",^||fruit(8)="cherry"
SET ^||fruit(1,1)="Macintosh",^||fruit(1,2)="Delicious",^||fruit(1,3)="Granny Smith"
SET ^||fruit(1,2,1)="Red Delicious",^||fruit(1,2,2)="Golden Delicious"
SET ^||fruit="Fruits"
WRITE "global arg ZWRITE:",!
ZWRITE ^||fruit
ルート・ノードを指定すると、そのルート・ノード自体が定義されていなくても、すべてのサブノードが表示されます。
SET fruit(1)="apple",fruit(4)="banana",fruit(8)="cherry"
SET fruit(1,1)="Macintosh",fruit(1,2)="Delicious",fruit(1,3)="Granny Smith"
SET fruit(1,2,1)="Red Delicious",fruit(1,2,2)="Golden Delicious"
WRITE "global arg ZWRITE:",!
ZWRITE fruit