Skip to main content

$vectorop (ObjectScript)

ObjectScript を通じて定義されたベクトルに対し、さまざまな操作を実行します。

Synopsis

集約操作

$vectorop("count", vexpr [ , bitexpr ] )
$vectorop("max", vexpr [ , bitexpr ] )
$vectorop("min", vexpr [ , bitexpr ] )
$vectorop("sum", vexpr [ , bitexpr ] )
フィルタ操作

$vectorop("defined", vexpr)
$vectorop("undefined", vexpr)
$vectorop("<", vexpr, expr1)
$vectorop("<=", vexpr, expr1)
$vectorop(">", vexpr, expr1)
$vectorop(">=", vexpr, expr1)
$vectorop("=", vexpr, expr1)
$vectorop("!=", vexpr, expr1)
$vectorop("between", vexpr, expr1, expr2)
ベクトル単位のフィルタ操作

$vectorop("v<", vexpr1, vexpr2)
$vectorop("v<=", vexpr1, vexpr2)
$vectorop("v>", vexpr1, vexpr2)
$vectorop("v>=", vexpr1, vexpr2)
$vectorop("v=", vexpr1, vexpr2)
$vectorop("v!=", vexpr1, vexpr2)
$vectorop("vbetween", vexpr1, vexpr2, vexpr3)
数値演算

$vectorop("+", vexpr, expr [ , bitexpr ] )
$vectorop("-", vexpr, expr [ , bitexpr ] )
$vectorop("/", vexpr, expr [ , bitexpr ] )
$vectorop("*", vexpr, expr [ , bitexpr ] )
$vectorop("**", vexpr, expr [ , bitexpr ] )
$vectorop("#", vexpr, expr [ , bitexpr ] )
$vectorop("e-", vexpr, expr [ , bitexpr ] )
$vectorop("e/", vexpr, expr [ , bitexpr ] )
$vectorop("v+", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("v-", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("v/", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("v*", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("v**", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("v#", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("ceiling", vexpr)
$vectorop("floor", vexpr)
文字列操作

$vectorop("_", vexpr, expr [ , bitexpr ] )
$vectorop("e_", vexpr, expr [ , bitexpr ] )
$vectorop("v_", vexpr1, vexpr2 [ , bitexpr ] )
$vectorop("lower", vexpr)
$vectorop("upper", vexpr)
$vectorop("substring", vexpr, intexpr1 [ , intexpr2 ... ] )
$vectorop("trim", vexpr)
$vectorop("triml", vexpr)
$vectorop("trimr", vexpr)
グループ化操作

$vectorop("group", vexpr, bitexpr, array)
$vectorop("countg", vexpr1, vexpr2, array [ , bitexpr ] )
$vectorop("maxg", vexpr1, vexpr2, array [ , bitexpr ] )
$vectorop("ming", vexpr1, vexpr2, array [ , bitexpr ] )
$vectorop("sumg", vexpr1, vexpr2, array [ , bitexpr ] )
$vectorop("countgb", vexpr, bitexpr, array)
その他の操作

$vectorop("convert", vexpr, expr [ , restrict ] )
$vectorop("length", vexpr)
$vectorop("mask", vexpr, expr)
$vectorop("positions", vexpr, bitexpr)
$vectorop("set", vexpr, expr)
$vectorop("set", vexpr, expr, type, bitexpr)
$vectorop("vset", vexpr1, vexpr2, [ , bitexpr ] )
情報操作

$vectorop("bytesize", vexpr)
$vectorop("type", vexpr)

引数

引数 説明
vexpr

ベクトルとして評価する有効な ObjectScript 式。一部のベクトル操作では、このベクトルが特定の型である必要があります。

expr

有効な ObjectScript 式。ベクトル操作では、多くの場合、この引数が特定の型である必要があります。

bitexpr

ビット文字列式。この引数は、$bit で作成されたビット文字列のグローバル変数名、または $bit に渡すことのできる式にできます。

多くの場合、これはベクトル操作のオプションの引数です。これが含まれている場合、bitexpr に対応する 1 の値があるベクトル内の位置でのみ、特定の操作が適用されます。

intexpr

整数に解決されるか、強制的に整数にできる有効な ObjectScript 式。

array

ベクトル操作でデータを入力する配列の名前。vectorop の呼び出しが行われる前に、未定義にすることができます。

省略形$vop

集約操作

集約操作はベクトルを受け取り、数値を返します。1 つのベクトル全体で操作を実行します。ベクトル内のある位置が未定義の場合は、その位置は無視されます。

すべての集約操作に、オプションの 3 番目の引数 bitexpr があります。この引数を使用して、操作を実行する特定のベクトル要素を指定できます。これが含まれている場合、true の値を持つビット文字列内の位置に対応する位置のベクトル要素のみが、集約操作に使用されます。

  • $vectorop("count", vexpr [ , bitexpr ] ) は、ベクトル vexpr 内の定義された要素の数をカウントします。未定義の要素はカウントから除外されます。結果として、返り値は常に、vexpr の長さ以下となります。

    3 番目の引数が指定されている場合、定義された要素を含む位置が操作でカウントされるのは、bitexpr の同じ位置に true の値がある場合のみです。

    for i = 1:1:10 set $vector(vec,i,"integer") = i  // defines a 10-element vector
    write $vectorop("count",vec)  // writes 10
    
  • $vectorop("max", vexpr [ , bitexpr ] ) は、ベクトルのデータ型で vexpr の最大要素を返します。未定義の要素は無視されます。

    3 番目の引数が指定されている場合、bitexpr が true の値を持つベクトル内の要素が定義されている位置のみが、返される可能性のある最大値として考慮されます。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("max", vec)  // writes 10
    
  • $vectorop("min", vexpr [ , bitexpr ] ) は、ベクトルのデータ型で vexpr の最小要素を返します。未定義の要素は無視されます。

    3 番目の引数が指定されている場合、bitexpr が true の値を持つベクトル内の要素が定義されている位置のみが、返される可能性のある最小値として考慮されます。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("min",vec)  // writes 1
    
  • $vectorop("sum", vexpr [ , bitexpr ] ) は、ベクトル内のすべての要素を加算し、ベクトルのデータ型に応じて、integer、double、または decimal の値を返します。この操作は、文字列またはタイムスタンプのデータ型のベクトルで呼び出されると、<FUNCTION> エラーを発生させます。

    3 番目の引数が指定されている場合、bitexpr が true の値を持つベクトル内の要素が定義されている位置のみが、合計に加算されます。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("sum",vec)  // writes 55
    

フィルタ操作

$vectorop 操作では、ベクトルをフィルタ処理するための多くの操作を提供します。フィルタ操作には、主に標準とベクトル単位の 2 種類があります。標準のフィルタ操作は、リストや配列に対して実行されるフィルタ操作と同様に、ベクトルに対して実行されます。ベクトル単位のフィルタ操作は、2 つの異なるベクトルの同じ位置にある要素を比較し、特定の操作の条件を満たす要素を持つベクトルを返します。

いずれかの入力ベクトルが未定義であったり、空の文字列である場合は、空の文字列が返されます。引数がベクトルでないその他の場合 (引数が数値型の場合など)、この操作は<VECTOR> エラーを発生させます。

標準のフィルタ操作

フィルタ操作は、入力ベクトルと同じ長さのビット文字列を返します。ここで、定義されたベクトルの位置は、指定された操作が対応する位置のベクトル内の引数をどのように評価するかに応じて、true または false の値に置き換えられます。

  • $vectorop("defined", vexpr) は、入力ベクトルと同じ長さのビット文字列を返します。定義されているベクトル内の要素に対応する位置には 1、定義されていないベクトル内の要素に対応する位置には 0 が含まれます。

    // vec = <1,,3,4,,6,,,9,10>
    zwrite $vectorop("defined",vec)  // writes the bitstring 1011010011
    
  • $vectorop("undefined", vexpr) は、入力ベクトルと同じ長さのビット文字列を返します。定義されていないベクトル内の要素に対応する位置には 1、定義されているベクトル内の要素に対応する位置には 0 が含まれます。

    // vec = <1,,3,4,,6,,,9,10>
    zwrite $vectorop("undefined",vec)  // writes the bitstring 0100101100
    
  • $vectorop("<", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値より小さいベクトル内の要素に対応する位置には 1、expr1 の値以上のベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop("<",vec, 5)  // writes the bitstring 1011000000
    
  • $vectorop("<=", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値以下のベクトル内の要素に対応する位置には 1、expr1 の値より大きいベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop("<=",vec, 5)  // writes the bitstring 1011100000
    
  • $vectorop(">", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値より大きいベクトル内の要素に対応する位置には 1、expr1 の値以下のベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop(">",vec, 5)  // writes the bitstring 0000010011
    
  • $vectorop(">=", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値以上のベクトル内の要素に対応する位置には 1、expr1 の値より小さいベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop(">=",vec, 5)  // writes the bitstring 0000110011
    
  • $vectorop("=", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値に等しいベクトル内の要素に対応する位置には 1、expr1 の値に等しくないベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop("=",vec, 5)  // writes the bitstring 0000100000
    
  • $vectorop("!=", vexpr, expr1) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値に等しくないベクトル内の要素に対応する位置には 1、expr1 の値に等しいベクトル内の要素に対応する位置には 0 が含まれます。この操作では、定義されていない位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop("!=",vec, 5)  // writes the bitstring 1111011111
    
  • $vectorop("between", vexpr, expr1, expr2) は、入力ベクトルと同じ長さのビット文字列を返します。expr1 の値以上、かつ、expr2 の値以下のベクトル内の要素に対応する位置には 1 が含まれます。expr1expr2 の値の間にないベクトル内の要素に対応する位置、および未定義の位置には 0 が返されます。

    // vec = <1,,3,4,5,6,,,9,10>
    zwrite $vectorop("between",vec, 3, 9)  // writes the bitstring 0011110010
    

ベクトル単位のフィルタ操作

ベクトル単位のフィルタ操作は、複数のベクトルを受け取り、入力ベクトルの対応する位置にある要素を比較する指定の演算子に基づいて、0 または 1 の値のビット文字列を返します。返されるビット文字列は、比較に使用された 2 つのベクトルのうち短い方と同じ長さになります。長い方のベクトルの余分な要素は無視されます。

入力ベクトルがすべて同じ型ではない場合、この操作は <FUNCTION> エラーを発生させます。

  • $vectorop("v<", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値より小さい場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v<",vec1,vec2)  // writes 1000
    
  • $vectorop("v<=", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値以下の場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v<=",vec1,vec2)  // writes 1011
    
  • $vectorop("v>", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値より大きい場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v>",vec1,vec2)  // writes 0100
    
  • $vectorop("v>=", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値以上の場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v>=",vec1,vec2)  // writes 0111
    
  • $vectorop("v=", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値と等しい場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v=",vec1,vec2)  // writes 0011
    
  • $vectorop("v!=", vexpr1, vexpr2) は、vexpr1 の値が vexpr2 の対応する値と等しくない場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1 または vexpr2 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <1,2,1,2>
    // vec2 = <2,1,1,2>
    zwrite $vectorop("v!=",vec1,vec2)  // writes 1100
    
  • $vectorop("vbetween", vexpr1, vexpr2, vexpr3) は、vexpr1 の値が vexpr2 の対応する値以上、かつ vexpr3 の対応する値以下の場合、各位置での値が 1 のビット文字列を返します。それ以外の場合、値は 0 です。vexpr1vexpr2、または vexpr3 のいずれかで要素が未定義の場合、ビット文字列内の対応する値は 0 です。

    // vec1 = <5,6,7>
    // vec2 = <4,7,8>
    // vec3 = <9,9,9>
    zwrite $vectorop("vbetween",vec1,vec2,vec3)  // writes 100
    

数値演算

数値演算は入力ベクトルに対して算術演算を実行し、演算の引数で定義された算術式の結果を含む新しいベクトルを返します。ベクトル引数が未定義または空の文字列の場合、これらの演算は空の文字列を返します。

ベクトル引数のデータ型が文字列の場合は、<FUNCTION> エラーがスローされます。

基本的な算術演算

基本的な算術演算はベクトルと単一の式を受け取ります。この式は暗黙的にベクトルのデータ型に強制されます。指定された値がベクトルのデータ型の範囲に合わない場合、この演算は <MAXERROR> エラーを発生させます。

基本的な算術演算では、オプションのビット文字列引数を指定できます。この引数が指定されている場合、演算はビット文字列の true の値に対応する位置にのみ適用され、結果としてこれらの位置のみが結果のベクトルで定義されます。

  • $vectorop("+", vexpr, expr [ , bitexpr ]) は、入力ベクトルと同じ長さおよび型で、定義されている vexpr の各要素に expr の値を加算したベクトルを返します。

    この演算は、タイムスタンプ・データ型のベクトルに適用できます。この場合、expr は、vexpr の値に加算するマイクロ秒数です。

    3 番目の引数が指定されている場合、vexprexpr の要素の加算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("+",vec,7)  // writes <11,13,14,17>
    
  • $vectorop("-", vexpr [ , expr , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、定義されている vexpr の各要素から expr の値を減算したベクトルを返します。expr が指定されていない場合、返されるベクトルには、vexpr 内の定義されている各要素に "-" の符号を付けた値が含まれます。

    この演算は、タイムスタンプ・データ型のベクトルに適用できます。この場合、expr は、vexpr の値から減算するマイクロ秒数です。

    3 番目の引数が指定されている場合、vexprexpr の要素の減算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("-",vec,7)  // writes <-3,-1,0,3>
    
  • $vectorop("/", vexpr, expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、各要素が vexpr の各要素を expr の値で除算した商の値を持つベクトルを返します。

    この演算は、タイムスタンプ・データ型のベクトルに適用できます。この場合、expr は、vexpr の値に加算または減算するマイクロ秒数です。

    3 番目の引数が指定されている場合、vexprexpr の要素の除算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("/",vec,2)  // writes <2,3,3,5>
    
  • $vectorop("*", vexpr, expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、定義されている expr の各要素に vexpr の値を乗算したベクトルを返します。

    3 番目の引数が指定されている場合、vexprexpr の要素の乗算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("*",vec,2)  // writes <8,12,14,20>
    
  • $vectorop("**", vexpr, expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、定義されている expr の各要素の vexpr 乗のベクトルを返します。

    3 番目の引数が指定されている場合、vexpr の要素の expr 乗は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("**",vec,2)  // writes <16,36,49,100>
    
  • $vectorop("#", vexpr, expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、各要素が vexpr の各要素を expr の値で除算した余りの値を持つベクトルを返します。

    3 番目の引数が指定されている場合、vexprexpr の要素の除算の余りは、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ返されます。

    // vec = <4,6,7,11>
    zwrite $vectorop("#",vec,3)  // writes <1,0,1,2>
    
  • $vectorop("e-", vexpr , expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、expr から、定義されている vexpr の各要素の値を減算したベクトルを返します。

    3 番目の引数が指定されている場合、exprvexpr の要素の減算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("e-",vec,7)  // writes <3,1,0,-3>
    
  • $vectorop("e/", vexpr, expr [ , bitexpr ] ) は、入力ベクトルと同じ長さおよび型で、各要素が exprvexpr の各要素の値で除算した商の値を持つベクトルを返します。

    3 番目の引数が指定されている場合、exprvexpr の要素の除算は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <4,6,7,10>
    zwrite $vectorop("e/",vec,8)  // writes <2,1,1,0>
    

ベクトル単位の算術演算

ベクトル単位の算術演算は、2 つのベクトルを受け取り、対応する位置にある要素に対して指定された演算を適用します。返されるベクトルは、2 つの入力ベクトルのうち短い方の長さになります。必要な 2 つの引数のいずれかがベクトルではない場合、演算は <VECTOR> エラーを発生させます。

ベクトル単位の算術演算では、オプションのビット文字列引数を指定できます。この引数が指定されている場合、演算はビット文字列の true の値に対応する位置にのみ適用され、結果としてこれらの位置のみが結果のベクトルで定義されます。

  • $vectorop("v+", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1vexpr2 の対応する位置にある要素を足し合わせたベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。

    vexpr1 が timestamp のベクトル型である場合、vexpr2 は integer のベクトル型を持つ必要があります。vexpr2 は、vexpr1 のタイムスタンプに加算するマイクロ秒数を表します。

    3 番目の引数が指定されている場合、vexpr1vexpr2 の要素の加算は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    zwrite $vectorop("v+",vec1,vec2)  // writes <4,9,9,14>
    
  • $vectorop("v-", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 の要素から vexpr2 の要素を減算したベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。

    vexpr1 が timestamp のベクトル型である場合、vexpr2 は integer のベクトル型を持つ必要があります。vexpr2 は、vexpr1 のタイムスタンプから減算するマイクロ秒数を表します。

    3 番目の引数が指定されている場合、vexpr1vexpr2 の要素の減算は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    zwrite $vectorop("v-",vec1,vec2)  // writes <2,3,-5,-4>
    
  • $vectorop("v/", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 の要素を vexpr2 の要素で除算したベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。vexpr1vexpr2 が integer の場合、演算では整数の除算が実行され、結果は integer のベクトルとなります。

    3 番目の引数が指定されている場合、vexpr1vexpr2 の要素の除算は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    zwrite $vectorop("v/",vec1,vec2)  // writes <3,2,0,0>
    
  • $vectorop("v*", vexpr1, vexpr2 < , bitexpr ] ) は、vexpr1 の要素に vexpr2 の要素を乗算したベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。

    3 番目の引数が指定されている場合、vexpr1vexpr2 の要素の乗算は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    write $vectorop("v*",vec1,vec2)  // writes <3,18,14,45>
    
  • $vectorop("v**", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 の要素の vexpr2 乗のベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。

    3 番目の引数が指定されている場合、vexpr1 の要素の、対応する vexpr2 要素のべき乗は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    zwrite $vectorop("v**",vec1,vec2)  // writes <3,216,128,1953125>
    
  • $vectorop("v#", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 の要素を vexpr2 の要素で除算した余りを含むベクトルを返します。vexpr1 の型が integer、decimal、または double の場合、vexpr2 は同じ型を持つ必要があります。同じ型でない場合、演算は <FUNCTION> エラーを発生させます。

    3 番目の引数が指定されている場合、vexpr1 の要素と対応する vexpr2 の要素の除算の余りは、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ返されます。

    // vec1 = <3,6,2,5>
    // vec2 = <1,3,7,9>
    zwrite $vectorop("v#",vec1,vec2)  // writes <0,0,2,5>
    

丸め演算

  • $vectorop("ceiling", vexpr) は、vexpr の各要素に切り上げ演算を適用した結果を要素の値とするベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。vexpr が ineger、decimal、または double 型のベクトルでない場合、演算は <FUNCTION> エラーを発生させます。

    // vec = <2.4, 2.5, 2.7, 2.81, 2.19, 2.0>
    zwrite $vectorop("ceiling",vec)  // writes <3,3,3,3,3,2>
    
  • $vectorop("floor", vexpr) は、vexpr の各要素に切り下げ演算を適用した結果を要素の値とするベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。vexpr が ineger、decimal、または double 型のベクトルでない場合、演算は <FUNCTION> エラーを発生させます。

    // vec = <2.4, 2.5, 2.7, 2.81, 2.19, 2.0>
    zwrite $vectorop("floor",vec)  // writes <2,2,2,2,2,2>
    

文字列操作

文字列操作は、入力ベクトルと同じ長さで、各位置に、指定した文字列操作の結果に基づく要素値が含まれる文字列ベクトルを返します。ある位置で値が未定義の場合、結果として得られるベクトルのその位置の値は未定義となります。

ベクトル入力のデータ型が string でない場合、操作は <FUNCTION> エラーを発生させます。

連結操作

連結操作は、文字列ベクトルを受け取り、別の引数をベクトルの各要素に連結します。

  • $vectorop("_", vexpr, expr [ , bitexpr ] ) は、定義されている各要素が expr と連結されたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    3 番目の引数が指定されている場合、vexprexpr の要素の連結は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <"b","great","larg">
    zwrite $vectorop("_",vec,"est")  // writes <"best","greatest","largest">
    
  • $vectorop("e_", vexpr, expr [ , bitexpr ] ) は、定義されている各要素が expr と連結されたベクトルを返します。この操作が $vectorop(“_”, ... ) と異なるのは、vexprexpr の引数が使用される順序のみです。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    3 番目の引数が指定されている場合、exprvexpr の要素の連結は、ベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec = <"b","great","larg">
    zwrite $vectorop("e_",vec,"est")  // writes <"estb","estgreat","estlarg">
    
  • $vectorop("v_", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 の定義されている各要素が vexpr2 の定義されている対応する要素と連結されたベクトルを返します。vexpr1 または vexpr2 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義になります。

    3 番目の引数が指定されている場合、vexpr1vexpr2 の要素の連結は、両方のベクトルに要素が定義されており、bitexpr の値が true である位置に対してのみ実行されます。

    // vec1 = <"take on", "take me", "I'll be">
    // vec2 = <" me", " on", " gone">
    zwrite $vectorop("v_",vec1,vec2)  // writes <"take on me","take me on","I'll be gone">
    

大文字/小文字の操作

大文字/小文字の操作は、ベクトル内の文字列の大文字/小文字を変更します。

  • $vectorop("lower", vexpr) は、vexpr の各要素が小文字に変換されたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    // vec = <"UpPeR","UPPER","upper"
    zwrite $vectorop("lower",vec)  // writes <"upper","upper","upper">
    
  • $vectorop("upper", vexpr) は、vexpr の各要素が大文字に変換されたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    // vec = <"UpPeR","UPPER","upper"
    zwrite $vectorop("upper",vec)  // writes <"UPPER","UPPER","UPPER">
    

部分文字列

$vectorop("substring", vexpr, intexpr1 [ , intexpr2 ] ) は、vexpr の定義された各要素から部分文字列を取得し、その部分文字列を含む新しいベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

部分文字列の範囲は、intexpr1 とオプションの intexpr2 によって決定されます。intexpr1 のみが指定されている場合、結果として得られる文字列には、intexpr1 の位置にある文字のみが含まれます。intexpr2 が指定されている場合、intexpr1 は部分文字列の開始位置を特定し、intexpr2 は部分文字列の終了位置を特定します。intexpr1intexpr2 の位置にある文字はどちらも部分文字列に含まれます。intexpr2 が特定の文字列の長さより大きい場合、この操作はエラーを発生させるのではなく、intexpr1 で始まり文字列の末尾で終わる部分文字列を返します。

// vec = <"long","short",,,"headstrong","teleport">
zwrite $vectorop("substring",vec,3,6)
// writes <"ng","ort",,,"adst","lepo">

トリミング操作

トリミング操作は、文字列の先頭または末尾、あるいはその両方から文字を削除します。

  • $vectorop("trim", vexpr) は、vexpr の各要素がトリミングされたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    // vec = <"  left", "right  ","  middle  ">
    zwrite $vectorop("trim",vec)  // writes <"left","right","middle">
    
  • $vectorop("triml", vexpr) は、vexpr の各要素がトリミングされたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    // vec = <"  left", "right  ","  middle  ">
    zwrite $vectorop("triml",vec)  // writes <"left","right  ","middle  ">
    
  • $vectorop("trimr", vexpr) は、vexpr の各要素がトリミングされたベクトルを返します。vexpr 内のある位置が定義されていない場合、その位置は、結果のベクトルでも未定義のままになります。

    // vec = <"  left", "right  ","  middle  ">
    zwrite $vectorop("trimr",vec)  // writes <"  left","right","  middle">
    

グループ化操作

グループ化操作により、さまざまな操作をベクトルのサブセットに対して実行することができます。結果は多次元配列に格納されます。すべてのグループ化操作の返り値は未定義となります。

基本的なグループ化

$vectorop("group", vexpr, bitexpr, array) は、bitexpr の対応する位置が true である vexpr の各値の添え字を、配列 array に入力します。false の bitexpr の位置に対応する vexpr の値は無視されます。

bitexpr の対応する位置が true の vexpr の位置で未定義のものがある場合、array は未定義に設定されます。配列に既に要素が定義されている場合、その配列はこの操作で未定義としてマークされませんが、新しい要素は追加されません。

vexpr が未定義または空の文字列の場合、bitexpr に true に設定されている位置があるかどうかに応じて、array の最上位ノードのみが変更される場合があります。

// vec = <10,8,6,15,3,17,18,2,7,100,101>
kill arr
zwrite $vectorop("group",vec,$factor(345),arr)  // writes ""
zwrite arr
arr(3)=""
arr(7)=""
arr(10)=""
arr(15)=""
arr(18)=""

ベクトルのグループ化

ベクトルのグループ化操作は、2 つのベクトル (vexpr1vexpr2)、多次元配列 (array)、およびオプションでビット文字列 (bitexpr) を受け取ります。データをグループ化した後、そのグループに対して指定の操作を実行し、結果を多次元配列に格納します。

vexpr2 内の要素は、vexpr1 の要素によって識別される、位置的に対応するグループに分割されます。例えば、vexpr2 の位置 5 の要素は、vexpr1 の位置 5 の値によって識別されるグループに属します。array には、vexpr1 の一意の値ごとに 1 つの添え字が含まれ、その添え字にグループの合計が格納されます。vexpr2 で定義されているが、vexpr1 では定義されていない位置は、array の最上位ノードに関連付けられたグループに属します。

array 内の既存の添え字は上書きされません。いずれかの添え字が vexpr1 の要素である場合、グループの合計値は、その添え字に既に格納されている値の末尾に追加されます。

オプションの bitexpr 引数が渡される場合、グループは、bitexpr が true の値を持つ vexpr2 の値に対してのみ形成されます。

  • $vectorop("countg", vexpr1, vexpr2, array [ , bitexpr ] ) は、グループ内の要素数をカウントし、それらを array の添え字に格納します。

    // vec1 = <"g1","g2","g1","g1","g2","g2","g2","g2","g1">
    // vec2 = <10,8,6,15,3,17,16,2,7,100,101>
    kill arr
    zwrite $vectorop("countg",vec1,vec2,arr)  // writes ""
    zwrite arr
    
    arr=2
    arr("g1")=4
    arr("g2")=5
    
  • $vectorop("maxg", vexpr1, vexpr2, array [ , bitexpr ] ) は、グループ内の最大値を見つけ、それらを array の添え字に格納します。

    // vec1 = <"g1","g2","g1","g1","g2","g2","g2","g2","g1">
    // vec2 = <10,8,6,15,3,17,16,2,7,100,101>
    kill arr
    zwrite $vectorop("maxg",vec1,vec2,arr)  // writes ""
    zwrite arr
    
    arr=101
    arr("g1")=15
    arr("g2")=17
    
  • $vectorop("ming", vexpr1, vexpr2, array [ , bitexpr ] ) は、グループ内の最小値を見つけ、それらを array の添え字に格納します。

    // vec1 = <"g1","g2","g1","g1","g2","g2","g2","g2","g1">
    // vec2 = <10,8,6,15,3,17,16,2,7,100,101>
    kill arr
    zwrite $vectorop("ming",vec1,vec2,arr)  // writes ""
    zwrite arr
    
    arr=100
    arr("g1")=6
    arr("g2")=2
    
  • $vectorop("sumg", vexpr1, vexpr2, array [ , bitexpr ] ) は、グループの合計を見つけ、それらを array の添え字に格納します。

    vexpr2 の型が string または timestamp の場合、この操作は <FUNCTION> エラーを発生させます。

    // vec1 = <"g1","g2","g1","g1","g2","g2","g2","g2","g1">
    // vec2 = <10,8,6,15,3,17,16,2,7,100,101>
    kill arr
    zwrite $vectorop("sumg",vec1,vec2,arr)  // writes ""
    zwrite arr
    
    arr=201
    arr("g1")=38
    arr("g2")=46
    

ビットマップのグループ化

$vectorop("countgb", vexpr, bitexpr, array) は、true の値を持つ bitexpr の位置に対応する位置のサブセットから、vexpr 内の同一の値をグループ化します。この操作は、vexpr のこのサブセットを添え字として array に追加し、サブセット内にこの値が出現する回数を格納します。ベクトルのグループ化操作と同様、この関数は、array 引数に値を入力し、返り値は未定義です。

// vec = <"x","y","x","y","x","y","y","y","x">
kill arr
zwrite $vectorop("countgb",vec,$factor(205),arr)  // writes ""
zwrite arr
arr("x")=2
arr("y")=3

その他の操作

InterSystems IRIS は、ベクトル内の情報の記述、ベクトルの型の変換、ベクトルの要素の設定など、さまざまな用途に使用できるベクトル操作を、他にも多数用意しています。

  • $vectorop("convert", vexpr, expr [ , restrict ] ) は、ObjectScript の変換規則に従って、vexpr の各要素が expr の型に強制変換された新しいベクトルを返します。vexpr 内の要素がターゲットの型の範囲に合わない場合、この操作は <MAXNUMBER> エラーを発生させます。expr は、文字列として表される有効なベクトル型である必要があります。

    オプションの restrict 引数は、デフォルトでは 0 に設定されますが、これを 1 に設定すると、vexpr 内の対応する値が要求された型に適合しない位置では未定義の値を持つように、返されるベクトルを制限することができます。これが発生する可能性があるケースとして、以下の 3 つが挙げられます。

    • vexpr 内の文字列値が有効な数値式ではない場合

    • 変換により精度が失われる場合 (integer 型に変換する場合など)

    • <MAXNUMBER> エラーが発生する場合

    vexpr で未定義の位置は、返されるベクトルでも未定義です。

    vexpr が未定義または空の文字列の場合、この操作は空の文字列を返します。vexpr がベクトルではない場合、または expr が有効なベクトル型に評価されない場合、この操作は <VECTOR> エラーを発生させます。

    // vec = <"1", "one", "4", "seven", "10">
    zwrite $vectorop("convert", vec, "int", 1)  // writes <1,,4,,10>
    
  • $vectorop("length", vexpr) は、vexpr の長さを返します。ベクトルの長さは、暗黙的に、定義された要素を持つ最後の位置として定義されます。vexpr には、複数の未定義要素が含まれる場合があります。

    vexpr が未定義または空の文字列の場合、この操作は 0 を返します。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("length",vec)  // writes 10
    
  • $vectorop("mask", vexpr, bitexpr) は、bitexpr0 の値を持つ未定義の位置がある vexpr と同じ型のベクトルを返します。結果として得られるベクトルの長さは、bitexpr となります。vexpr に定義された値があるすべての位置で bitexpr の値が 0 のため、結果のベクトルに未定義の要素しか含まれない場合は、空の文字列が返されます。

    vexpr が未定義または空の文字列の場合、この操作は空の文字列を返します。さらに、bitexprvexpr より長い場合、この操作は空の文字列を返します。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    zwrite $vectorop("mask",vec,$factor(500))  // writes <,,3,,5,6,7,8,9>
    
  • $vectorop("positions", bitexpr) は、bitexpr1 である vexpr 内の各位置がその位置の整数自体に設定されている整数ベクトルを返します。bitexpr0 の位置は未定義です。

    // bitexpr = $factor(46)
    zwrite $vectorop("positions",bitexpr)  // writes <,2,3,4,,6>
    
  • $vectorop("set", vexpr, expr) は、vexpr と同じ型および長さであるものの、各要素が expr に設定されている新しいベクトルを返します。expr の型は、強制的にベクトルの型に変換されます。指定された値がベクトルのデータ型の範囲に合わない場合、この操作は <MAXNUMBER> エラーを発生させます。

    vexpr が未定義または空の文字列の場合、この操作は空の文字列を返します。vexpr は定義されている値だが、ベクトルでも空の文字列でもない場合、この操作は <VECTOR> エラーを発生させます。

    // vec = <60,40,80,90>
    $vectorop("set", vec, 500)  // writes <500,500,500,500>
    
  • $vectorop("set", vexpr, expr, type, bitexpr) は、vexpr と同じ型および長さの新しいベクトルを返します。ここで、指定された bitexpr が true の値を持つすべての位置は、expr に設定され、ObjectScript の変換規則を使用して、暗黙的にそのベクトルの型に強制的に変換されます。返されるベクトルの長さは、bitexpr の長さとなります。指定された値がベクトルのデータ型の範囲に合わない場合、この操作は <MAXNUMBER> エラーを発生させます。

    vexpr が未定義または空の文字列の場合、返されるベクトルの長さは、bitexpr が true の値を持つ最後の位置を介して定義されます。この場合、返されるベクトルの型は、type で指定される型になります。vexpr が定義されている場合、type はその型と一致する必要があります。type は常に有効なベクトルの型として定義される必要があり、定義されていない場合、この操作は <VECTOR> エラーを発生させます。

    bitexpr が未定義または空の文字列の場合、返されるベクトルは、vexpr と同じになります。

    vexpr が定義されているがベクトルではない場合、この操作は <VECTOR> エラーを発生させます。vexprbitexpr が未定義または空の文字列の場合、この操作は空の文字列を返します。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    zwrite $vectorop("set",vec,16,"int",$factor(63))
    // writes <1,100,100,4,100,100,7,8,9,10>
    
  • $vectorop("vset", vexpr1, vexpr2 [ , bitexpr ] ) は、vexpr1 と同じ型および長さのベクトルを返します。ここで、各位置の要素は、vexpr2 の対応する値 (これが定義されている場合)、または vexpr1 の値 (vexpr2 の値が未定義の場合) に設定されます。vexpr1 が未定義または空の文字列の場合、この操作は vexpr2 のコピーを返します。

    4 番目の引数が指定されている場合、この操作は、bitexpr で true の値に対応する位置に対してのみ実行されます。返されるベクトルの長さは、vexpr1 の長さ、または bitexpr が true の値を持ち、vexpr2 が定義されている最後の位置の、いずれか大きい方です。

    オプションの bitexpr 引数が含まれているが、未定義または空の文字列である場合、この操作は、bitexpr が false の値のみを持つと想定し、vexpr1 のコピーを返します。vexpr2 内のある位置が、明示的に未定義であるか、bitexprvexpr2 より長いため、未定義である場合、結果のベクトルは、bitexpr が true の値を持つ位置で未定義の値を持ちます。vexpr1 が未定義または空の文字列の場合、この操作は、vexpr2 と同じ型で、指定された bitexpr が true の値を持つすべての位置が vexpr2 の対応する位置の要素の値に設定されたベクトルを返します。

    // vec1 = <1,,3,4,,6>
    // vec2 = <,2,10,11,,12>
    zwrite $vectorop("vset",vec1,vec2)  // writes <1,2,10,11,,12>
    

情報操作

  • $vectorop("bytesize", vexpr) は、バイト数で表した vexpr の現在のサイズを返します。vexpr が未定義の場合、この操作は <UNDEFINED> エラーを発生させます。vexpr が空の文字列であるか、ベクトルでない場合、この操作は <VECTOR> エラーを発生させます。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("bytesize",vec)  // writes 320
    
  • $vectorop("type", vexpr)vexpr の型を文字列で返します。可能な値は、“integer”、“decimal”、“double”、“timestamp”、“string” です。vexpr が未定義の場合、この操作は <UNDEFINED> エラーを発生させます。vexpr が空の文字列であるか、ベクトルでない場合、この操作は <VECTOR> エラーを発生させます。

    for i = 1:1:10 set $vector(vec,i,"integer") = i
    write $vectorop("",vec)  // writes "integer"
    

関連項目

FeedbackOpens in a new tab