$REPLACE
Synopsis
$REPLACE(string,oldsub,newsub,start,count,case)
パラメータ
string | ソース文字列。数値、文字列リテラル、変数名、あるいは任意の有効な ObjectScript 式を使用できます。string が空文字列 ("") の場合、$REPLACE は空文字列を返します。 |
oldsub | string 内で検索する部分文字列。数値、文字列リテラル、変数名、あるいは任意の有効な ObjectScript 式を使用できます。oldsub が空文字列 ("") の場合、$REPLACE は string を返します。 |
newsub | string の oldsub のインスタンスと置換される置換部分文字列。数値、文字列リテラル、変数名、あるいは任意の有効な ObjectScript 式を使用できます。newsub が空文字列 ("") の場合、$REPLACE は oldsub の出現箇所を削除して string を返します。 |
start | オプション — 部分文字列の検索を開始する string 内の文字カウント位置。文字列は 1 からカウントされます。0、負の数字、非数値文字列または空の文字列は、1 と同じです。省略した場合、1 と見なされます。start > 1 の場合、部分文字列 (存在する場合) の置換を実行して、その文字で始まる string の部分文字列が返されます。start > $LENGTH(string) の場合、$REPLACE は空の文字列 ("") を返します。 |
count | オプション — 部分文字列を置換する回数。省略した場合、既定値は -1 です。これは、可能なすべての置換を実行します。0、-1 以外の負の数字、非数値文字列または空の文字列は、置換を実行しないことを意味する 0 と同じです。count は、start と併用する必要があります。 |
case | オプション — string の oldsub のマッチングで大文字と小文字を区別するかどうかを示すブーリアン・フラグ。0 は大文字と小文字を区別します (既定値)。1 は大文字と小文字を区別しません。ゼロ以外の数は、1 と同様です。数値以外の値は、0 と同様です。プレースホルダのコンマは、start または count が指定されていない場合に指定できます。 |
説明
$REPLACE 関数は、入力文字列の文字列単位の置換で構成される新しい文字列を返します。string で oldsub 部分文字列を検索します。$REPLACE が一致する値を見つけると、oldsub 部分文字列を newsub に置換し、結果の文字列を返します。newsub パラメータ値は、oldsub より長い値も短い値もとることができます。newsub は空の文字列でもかまいません。
既定では、$REPLACE は string の先頭から開始して、oldsub の各インスタンスを置換します。オプションの start パラメータを使用して、文字列の中の指定された文字カウント位置で比較を開始できます。返される文字列は start の位置から始まり、それ以降の oldsub の各インスタンスを置換する string の部分文字列です。オプションの count パラメータを使用すると、一致する部分文字列の指定された数のみを置換できます。
既定では、$REPLACE 部分文字列マッチングは大文字と小文字が区別されます。オプションの case パラメータを使用して、大文字と小文字が区別されないマッチングを指定することができます。
$REPLACE は、長い文字列が有効化されている Caché インスタンスでの長い文字列 (32,767 文字超の文字列) をサポートしています。
$REPLACE を使用すると文字列の長さが変わる場合があるため、Caché %List 要素などのエンコードされた文字列値で $REPLACE を使用しないでください。
$REPLACE および $TRANSLATE
$REPLACE は文字列と文字列をマッチングして置換します。$TRANSLATE は文字と文字をマッチングして置換します。$REPLACE は、1 つ以上の文字の単一の指定された部分文字列を別の部分文字列に置換できます。$TRANSLATE は、複数の指定された文字を対応する指定された新しい文字に置換できます。既定では、どちらの関数も、文字列のすべての一致するインスタンスを置換します。
$REPLACE のマッチングは既定で大文字と小文字が区別されますが、大文字と小文字を区別せずに呼び出すことができます。一方、$TRANSLATE のマッチングは常に大文字と小文字が区別されます。$REPLACE ではマッチングの開始ポイントおよび/または実行する置換の数を指定できます。一方、$TRANSLATE ではソース文字列の一致対象がすべて置換されます。
例
以下の例は、$REPLACE の 2 つの使用法を示しています。最初の $REPLACE では、入力文字列値は変更されません。2 番目の $REPLACE では、関数の返り値と同じ値に設定することで、入力文字列値が変更されます。
SET str="The quick brown fox"
SET newstr=$REPLACE(str,"brown","red")
WRITE "source string: ",str,!,"new string: ",newstr,!!
// creates a new string, does not change str value
SET str=$REPLACE(str,"brown","silver")
WRITE "revised string: ",str
// creates a new string and replaces str with new string value
以下の例では、$REPLACE を呼び出して、部分文字列のすべてのインスタンスのマッチングと置換、部分文字列の最初の 2 つのインスタンスのマッチングと置換を実行します。
SET str="1110/1110/1100/1110"
WRITE !,"before conversion ",str
SET newall=$REPLACE(str,"111","AAA")
WRITE !,"after replacement ",newall
SET newsome=$REPLACE(str,"111","AAA",1,2)
WRITE !,"after replacement ",newsome
以下の例では、$REPLACE を呼び出して、大文字と小文字を区別するマッチングと大文字と小文字を区別しないマッチングを行い、文字列のすべての出現箇所を置換します。
SET str="Yes/yes/Y/YES/Yes"
WRITE !,"before conversion ",str
SET case=$REPLACE(str,"Yes","NO")
WRITE !,"after replacement ",case
SET nocase=$REPLACE(str,"Yes","NO",1,-1,1)
WRITE !,"after replacement ",nocase
以下の例では、$REPLACE 関数と $TRANSLATE 関数を比較します。
SET str="A mom, o plom, o comal, Pomama"
WRITE !,"before conversion ",str
SET s4s=$REPLACE(str,"om","an")
WRITE !,"after replacement ",s4s
SET c4c=$TRANSLATE(str,"om","an")
WRITE !,"after translation ",c4c
$REPLACE は "A man, o plan, o canal, Panama" を返します。
$TRANSLATE は "A nan, a plan, a canal, Panana" を返します。
以下の例で、$REPLACE の 4 パラメータ形式は、開始ポイントから始まる文字列の一部のみを、文字列と文字列の置換を行って返します。
SET str="A mon, a plon, a conal, Ponama"
WRITE !,"before start replacement ",str
SET newstr=$REPLACE(str,"on","an",8)
WRITE !,"after start replacement ",newstr
$REPLACE は "a plan, a canal, Panama" を返します。
関連項目
-
$TRANSLATE 関数
-
$EXTRACT 関数
-
$PIECE 関数
-
$REVERSE 関数
-
$ZCONVERT 関数