$TRANSLATE (ObjectScript)
構文
$TRANSLATE(string,identifier,associator)
$TR(string,identifier,associator)
引数
引数 | 説明 |
---|---|
string | ソース文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。 |
identifier | 検索文字。string で検索する 1 つ以上の文字で構成される文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。 |
associator | オプション — 置換文字。identifier でそれぞれの文字に位置的に対応する 1 つ以上の置換文字で構成される文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。 |
概要
$TRANSLATE 関数は、ソース文字列の 1 つ以上の文字単位の置換で構成される新しい文字列を返します。$TRANSLATE 処理では、複数の文字が置換される場合もありますが、1 文字が (最大) 1 文字に置換されるだけの場合もあります。string 引数の処理を一度に 1 文字行います。入力文字列にある各文字と identifier 引数にある各文字とを比較します。$TRANSLATE が一致を見つけると、その文字に対して以下のいずれかのアクションを実行します。
-
$TRANSLATE の 2 引数形式は、返された文字列から identifier 引数の文字を取り除きます。
-
$TRANSLATE の 3 引数形式は、string で見つかった identifier 文字を、associator 引数から位置的に対応する文字と置き換え、結果の文字列を返します。置換は、文字列単位ではなく文字単位で行われます。identifier 引数に含まれる文字が associator 引数よりも少ない場合、associator 引数にある余分な文字は無視されます。identifier 引数に含まれる文字が associator 引数よりも多い場合、identifier 引数にある余分な文字は出力文字列で削除されます。
$TRANSLATE は、大文字と小文字を区別します。
通常、string、identifier、および associator 引数は、引用符付きの文字列として指定されます。これらの引数のいずれかの値が純粋な数値である場合、文字列の引用符は不要です。ただし、InterSystems IRIS は $TRANSLATE に値を指定する前に引数値をキャノニック形式の数に変換するため、この使用は推奨されません。
例
以下の例は、$TRANSLATE の 2 つの使用法を示しています。最初の $TRANSLATE では、入力文字列値は変更されません。2 番目の $TRANSLATE では、関数の返り値と同じ値に設定することで、入力文字列値が変更されます。
SET str="The quick brown fox"
SET newstr=$$TRANSLATE(str,"qbf","QBF")
WRITE "source string: ",str,!,"new string: ",newstr,!!
// creates a new string, does not change str value
SET str=$$TRANSLATE(str,"qbf","QBF")
WRITE "revised string: ",str
// creates a new string and replaces str with new string value
以下の例では、2 引数 $TRANSLATE が現在のロケールの設定に基づいて数値グループ区切り文字を削除します。
AppropriateInput
SET ds=##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
IF ds="." {SET x="+1,462,543.33"}
ELSE {SET x="+1.462.543,33"}
TranslateNum
WRITE !,"before translation ",x
SET ngs=##class(%SYS.NLS.Format).GetFormatItem("NumericGroupSeparator")
IF ngs="," {SET x=$TRANSLATE(x,",") }
ELSEIF ngs="." {SET x=$TRANSLATE(x,".") }
ELSEIF ngs=" " {SET x=$TRANSLATE(x," ") }
ELSE {WRITE "Non-standard NumericGroupSeparator:", ngs
RETURN }
WRITE !,"after translation ",x
以下の例では、3 引数 $TRANSLATE がさまざまな日付区切り文字をスラッシュに置き換えます。associator では、identifier 内の文字数と同数の / を指定する必要があることに注意してください。
SET x(1)="06-23-2014"
SET x(2)="06.24.2014"
SET x(3)="06/25/2014"
SET x(4)="06|26|2014"
SET x(5)="06 27 2014"
FOR i=1:1:5{
SET x(i)=$TRANSLATE(x(i),"- .|","////")
WRITE "x(",i,") :",x(i),!
}
以下の例では、3 引数 $TRANSLATE がアクセント付き文字をアクセントなし文字に置き換え、疑問文および感嘆文の接頭辞句読点を削除することで、スペイン語を基本 ASCII に “簡略化” します。
SET esp="¿Sabes lo que ocurrirá en el año 2016?"
WRITE "Spanish:",!,esp,!
SET iden=$CHAR(225)_$CHAR(233)_$CHAR(237)_$CHAR(241)_$CHAR(243)_$CHAR(250)_$CHAR(161)_$CHAR(191)
SET asso="aeinou"
WRITE "Identifier: ",iden,!
WRITE "Associator: ",asso,!
SET spanglish=$TRANSLATE(esp,iden,asso)
WRITE "Spanglish:",!,spanglish
もちろん、この変換は、実際のスペイン語テキストでの使用はお勧めしません。
$TRANSLATE、$REPLACE、および $CHANGE
$TRANSLATE は文字と文字をマッチングして置換します。$REPLACE と $CHANGE は文字列と文字列をマッチングして置換します。$REPLACE と $CHANGE は、1 つ以上の文字の単一の指定された部分文字列を別の任意の長さの部分文字列に置換できます。$TRANSLATE は、複数の指定された文字を対応する指定された置換文字に置換できます。この 3 つの関数はすべて、一致する文字または部分文字列を削除 (NULL に変換) します。
$TRANSLATE のマッチングでは、常に大文字と小文字が区別されます。$REPLACE のマッチングでは既定で大文字と小文字が区別されますが、大文字と小文字を区別せずに呼び出すこともできます。$CHANGE では、常に大文字と小文字が区別されます。
$TRANSLATE では常にソース文字列の一致対象がすべて置換されます。$REPLACE と $CHANGE では、マッチングの開始ポイントおよび/または実行する置換の数を指定できます。$REPLACE と $CHANGE では、開始ポイントの定義方法が異なります。