1つ以上のバイトで構成される、指定されたバイトシーケンスによって、バイトの区切りのシーケンスを返します。
$ZPIECE() 関数のフォーマット:
$ZP[IECE](expr1,expr2[,intexpr1[,intexpr2]])
最初の式(expr1) は、$ZPIECE() がその結果を計算する元となるオクテットのシーケンスを指定します。
2番目の式(expr2)は、"境界" 位置を決定する区切りバイトシーケンスを指定します; もしこの引数が空文字列の場合、$ZPIECE() は空の文字列を返します。
もし2番目の式(expr2)が最初の式のどこにも現れない場合は、$ZPIECE() は、最初の式の全体を返します(2つ目の整数式で空の文字列を返すように強制されない限り)。
オプションの最初の整数式(3番目の引数)は、返すための開始部分文字を指定します; もしこの引数が欠落している場合、$ZPIECE() は最初の部分文字を返します。
オプションの2番目の整数式(4番目の引数)は、返すための最後の部分文字を指定します。もしこの引数が欠落している場合、それがヌル文字列を返す場合には、最初の整数式がゼロ(0)または負でない限りは、$ZPIECE() は部分文字1つのみを返します。もしこの引数が最初の整数の式より小さい場合、$ZPIECE() はnull を返します。
もし2番目の整数式が最初の式で部分文字の実際の数を超える場合、$ZPIECE() は、最初に整数式によって選択されたデリミタの後の式のすべてを返します。
$ZPIECE() の結果は、"外部:outside" の区切り文字を決して含んでいません; ただし、2番目の整数の引数が複数の部分文字を指定しているとき、結果は、区切り文字の "内側:inside" の出現を含んでいます。
$ZPIECE() は、長さが可変であるそれぞれが複数のエレメントまたはフィールドが含まれている値を効果的に使用するツールを提供します。
アプリケーションは、通常、ストレージのオーバーヘッドを最小限に抑えるために、$ZPIECE() 区切り文字(2番目の引数)に単一のバイトを使用し、そして、実行時の効率を向上させます。データ値は区切り文字を決して含まないので、区切り文字を選択する必要があります。編集のチェックでこの習慣を強制することの障害は、データ値内の部分文字列の位置に予期しない変更が発生する可能性があります。キャレット記号(^)、バックスラッシュ(\)、アスタリスク(*)文字は、良く利用する目に見える区切り文字の例です。複数バイトのデリミタは、フィールドの内容とのコンフリクトの可能性を減らすことができます。しかし、それらはストレージの効率性を低下させ、単一バイトの区切り文字よりも効率性は少なく処理されます。一部のアプリケーションでは、データに現れる区切り文字の可能性は減らせ、目に見える区切り文字で提供される読みやすさが犠牲になりますが、制御文字が使用できます。
SETコマンドの引数は、その等号(=)の左辺の$ZPIECE() のフォーマットを持っている何かを持つことができます。この構文は、オクテットのシーケンス内のそれぞれの部分を容易にメンテナンスが可能です。また、区切り文字のバイトシーケンスを生成するために使用することもできます。SET $ZPIECEの詳細については、" コマンド " の章の SET を参照してください。
例:
GTM>for i=0:1:3 write !,$zpiece("主"_$zchar(64)_"要",$zchar(64),i),"|" | 主| 要| | GTM>
このループは、区切り文字として$ZCHAR(64)、部分文字列の位置の "前"、1番目と2番目、そして、"後" のオクテットのシーケンスを指定して、$ZPIECE() の結果を表示します。
例:
GTM>for i=-1:1:3 write !,$zpiece("主"_$zchar(64)_"要",$zchar(64),i,i+1),"|" | 主| 主@要| 要| | GTM>
この例では、それぞれの繰り返しで、2つの部分文字を表示することを除いて、前の例と似ています。両方の部分文字を表示する3番目の繰り返しにおいて出力の途中に区切り文字()に注意してください。
例:
For p=1:1:$ZLength(x,"/") Write ?p-1*10,$ZPiece(x,"/",p)
これは、カラムフォーマットで、x のすべての部分文字を表示するために $ZLENGTH() と $ZPIECE() を使用しています。
例:
GTM>Set $piece(x,$zchar(64),25)="" write x ???@@@@@@@@@@@@@@@@@@@@@@@@
これは、$ZCHAR(64)の区切り文字で、変数 x の25番目をnullにSETします。これは、null に続く24個のアットマーク(@)のバイトシーケンスを生成します。