Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Piece

区切り文字を使用して、指定した部分文字列を返します。

Synopsis

Piece(string,delimiter[,from[,to]])

Piece(string,delimiter[,from[,to]])=value

引数

string 抽出する部分文字列を含む文字列式。
delimiter string 内の部分文字列の識別に使用される区切り文字。
from オプション — ターゲット文字列から返される部分文字列または部分文字列の範囲の先頭を指定する整数。string の先頭からの部分文字列のカウントとして指定されます。部分文字列は、delimiter で区切られ、1 から始まります。省略すると、最初の部分文字列が返されます。
to オプション — ターゲット文字列から返す部分文字列の範囲の最終部分文字列を指定する整数。string の先頭からの部分文字列のカウントとして指定されます。from と共に使用される必要があります。

概要

Piece 関数には以下の 2 つの使用方法があります。

  • string から、部分文字列または部分文字列の範囲を返します。部分文字列は、string に存在する delimiter 文字 (または文字列) を指定することによって決定されます。これには構文 Piece(string,delimiter,from,to) が使用されます。

  • string の部分文字列を置換します。置換部分文字列は、元の部分文字列と同じ長さでも、長くても、短くてもかまいません。部分文字列は、string に存在する delimiter 文字 (または文字列) を指定することによって決定されます。これには構文 Piece(string,delimiter,from,to)=value が使用されます。

string から指定された部分文字列 (piece) を返す場合、返される部分文字列は、使用される引数によって変わります。

  • Piece(string,delimiter) は、string の最初の部分文字列を返します。delimiterstring 内に見つかった場合、最初の delimiter の前にある部分文字列が返されます。delimiterstring 内に見つからない場合、返される部分文字列は string です。

  • Piece(string,delimiter,from) は、stringn 番目の部分文字列を返します。整数 n は、引数 from で指定され、部分文字列は delimiter で区切られます。区切り文字は返されません。

  • Piece(string,delimiter,from,to) は、from で指定された部分文字列から、to で指定された部分文字列までの範囲にある部分文字列を返します。4 つの引数の Piece が返す文字列は、from から to までの部分文字列の間にあり、それらを区切っている delimiter を含んだ文字列です。to が部分文字列数よりも大きい場合、返される部分文字列には、string の最後までのすべての部分文字列が含まれます。

fromto には正の整数を指定する必要があります。これ以外の値を指定した場合、Piece 関数は空の文字列を返します。

引数

string

部分文字列を返すターゲット文字列です。文字列リテラル、変数名、または文字列に評価される任意の有効な Caché Basic 式を指定できます。ターゲット文字列として NULL 文字列 ("") を指定する場合、Piece は、NULL 文字列を返します。

通常、ターゲット文字列には、区切り文字として使用される文字 (または文字列) が含まれます。この文字または文字列は、string 内でデータ値として使用することはできません。

Piece が等号の左側で使用されるとき、string は有効な変数名に評価される必要があります。

delimiter

string 内の部分文字列を区切るために使用される検索文字列です。(引用符で囲まれた) 数値または文字列リテラル、変数名、文字列に評価される式を指定できます。

通常、区切り文字には、文字列データ内で決して使用されることがなく、部分文字列を区切る文字としてのみ使用する特定の文字を設定します。区切り文字には、複数文字からなる検索文字列を指定することもできますが、それを構成する個々の文字は文字列データ内で使用できます。

指定された区切り文字が string に存在しない場合、Piecestring 文字列全体を返します。指定された区切り文字が NULL 文字列 ("") である場合、Piece は、NULL 文字列を返します。

from

string 内の部分文字列の番号で、1 から始まります。これは正の整数、整数変数の名前、または正の整数として評価される式でなければなりません。部分文字列は区切り文字で区切られます。

  • 引数 from が省略された場合または 1 に設定された場合、Piecestring の最初の部分文字列を返します。指定された区切り文字が string にない場合、from 値を 1 に設定すると string が返されます。

  • 引数 from が計算によって string の最後の部分文字列を指す場合、この部分文字列の後の区切り文字があるなしに関係なく、この部分文字列が返されます。

  • from の値が NULL 文字列 ("")、ゼロ、負の数の場合、または string 内の部分文字列数よりも大きい場合、Piece は NULL 文字列を返します。

引数 from が引数 to と共に使用される場合、from は文字列として返される部分文字列の範囲の先頭を指定し、to の値よりも小さくなければなりません。

to

引数 from によって先頭が指定された範囲を終了する、string 内の部分文字列の番号です。返される文字列には、from の位置の部分文字列と to の位置の部分文字列に加えて、その両者の間の部分文字列とそれらを区切る区切り文字が含まれます。to 引数は、正の整数、整数変数の名前、または正の整数に評価される式でなければなりません。引数 to は必ず from と共に使用し、from の値よりも大きい必要があります。

  • fromto よりも小さい場合、Piece は、from 位置の部分文字列と to 位置の部分文字列を含む、この範囲内にあるすべての区切られた部分文字列からなる文字列を返します。この返された文字列には、範囲内にある部分文字列と区切り文字が含まれます。

  • to が区切られた部分文字列の数よりも大きい場合、返される値には、from 位置の部分文字列から string 文字列の末尾までのすべての文字列データ (部分文字列と区切り文字) が含まれます。

  • fromto と同じ場合、from 位置の部分文字列が返されます。

  • fromto よりも大きい場合、Piece は NULL 文字列を返します。

  • to が NULL 文字列 ("") である場合、Piece は、NULL 文字列を返します。

Piece を使用した部分文字列の置換

等号の左辺で Piece を使用して、string 内の部分文字列を置換できます。Piece は、等号の左側に使用されると、代入値で置き換えられる部分文字列の値を示します。

このコンテキストで Piece (および List) を使用すると、単に値を返すだけではなく、既存の値を変更してしまうため、他の基本関数とは異なります。

区切られた部分文字列の置換

以下の例は、colorlist の値を "Red,Cyan,Yellow,Green,Orange,Purple,Black" に変更します。

colorlist="Red,Blue,Yellow,Green,Orange,Purple,Black"
PrintLn colorlist
Piece(colorlist,",",2)="Cyan"
PrintLn colorlist

置換部分文字列は、元の部分文字列より長くても、短くてもかまいません。

引数 from を指定しない場合、最初の部分文字列が置換されます。

colorlist="Red,Blue,Yellow,Green,Orange,Purple,Black"
PrintLn colorlist
Piece(colorlist,",")="Crimson"
PrintLn colorlist

引数 fromto を指定すると、この間に含まれる部分文字列が指定された値に置換されます。この例では 4、5、6 番目の区切り部分文字列が相当します。

colorlist="Red,Blue,Yellow,Green,Orange,Purple,Black"
PrintLn colorlist
Piece(colorlist,",",4,6)="non-primary colors"
PrintLn colorlist

Piece がターゲット変数内に存在するより多くの区切り文字を指定すると、値の最後に、指定した数よりも 1 つ少ない数まで区切り文字を追加します。以下の例は、smallcolor の値を "Green;Blue;;Red" に変更します。追加される区切り文字の数は、from 値から既存の区切り文字の数を引いて、さらに 1 を引いたものと等しくなります。

smallcolor="Green;Blue"
PrintLn smallcolor
Piece(smallcolor,";",4)="Red"
PrintLn smallcolor

stringdelimiter が存在しない場合、Piecestring 単一の文字として扱い、前述どおり置換を行います。from 引数を指定していない場合、元の string は新しい値で置き換えられます。

colorlist="Red,Green,Blue"
PrintLn colorlist
Piece(colorlist,"^")="Purple^Orange"
PrintLn colorlist

delimiterstring に存在しないときに from を指定している場合、Piece では string の末尾に区切り文字が付加され、それによって得られた新しい値が string に追加されて、from 値の条件が成立するようにします。

colorlist="Red,Green,Blue"
PrintLn colorlist
Piece(colorlist,"^",3)="Purple^Orange"
PrintLn colorlist

区切り文字が NULL 文字列

区切り文字が NULL 文字列の場合、from 引数や to 引数の値に関係なく、元の string が新しい値に置換されます。

以下の 2 つの例では、どちらも colorlist は “Purple” に設定されます。

colorlist="Red,Green,Blue"
PrintLn colorlist
Piece(colorlist,"")="Purple"
PrintLn colorlist
colorlist="Red,Green,Blue"
PrintLn colorlist
Piece(colorlist,"",3,5)="Purple"
PrintLn colorlist

文字列変数の初期化

string 変数は、値を割り当てる前に定義する必要はありません。以下の例は、newvar を文字パターン ">>>>>>TOTAL" に初期化します。

Piece(newvar,">",7)="TOTAL"
PrintLn newvar

32,768 文字より大きいパラメータを持つ Piece

32767 文字を超える長さのパラメータを指定して Piece を使用したい場合は、長い文字列を有効にする必要があります。長い文字列のサポートが既定で有効になります。管理ポータルで、[システム管理]→[構成]→[システム構成] メニューから、システム, 構成, メモリと開始設定 に移動します。システム全体で長い文字列のサポートを可能にするには、[長い文字列の使用を有効にする] チェック・ボックスにチェックを付けます。続いて、[保存] ボタンをクリックします。

以下の例は、“|” 文字を区切り文字に使用して、文字列からの指定された部分文字列を返します。

MyString = "InterSystems|One Memorial Drive|Cambridge|MA 02142"
Println Piece(MyString, "|") 'InterSystems
Println Piece(MyString, "|", 2) 'One Memorial Drive
Println Piece(MyString, "|", 3, 4) 'Cambridge|MA 02142
Println Piece(Piece(MyString, "|", 4), " ") 'MA

以下の例では、複数文字の区切り文字列を使用して同じ操作を実行します。

MyString = "InterSystemslinebreakOne Memorial DrivelinebreakCambridge MAlinebreak02142"
Println Piece(MyString, "linebreak") 'InterSystems
Println Piece(MyString, "linebreak", 2) 'One Memorial Drive
Println Piece(MyString, "linebreak", 3) 'Cambridge MA
Println Piece(MyString, "linebreak", 4,4) '02142

関連項目

FeedbackOpens in a new tab