その中の他の引数のパターンによって指定されたその引数の最初の文字を置き換えたり削除した結果の文字を返します。
$TRANSLATE 関数のフォーマット:
$TR[ANSLATE](expr1[,expr2[,expr3]])
最初の式(expr1)は、$TRANSLATE() 操作をする対象の文字列を指定します。他の引数が省略されている場合は、 $TRANSLATE() は、この式expr1を返します。
オプションの第2式(expr2)は、$TRANSLATE()に置換するための文字を指定します。もし文字が2番目の式に複数回出現する場合、最初の出現は翻訳を制御し、そして、$TRANSLATE() は後続の出現を無視します。もしこの引数が省略された場合、$TRANSLATEは、変更せずに、最初の式を返します。
オプションの3番目の式は、2番目の式で位置的に対応する文字の置換文字を指定します。もしこの引数を省略するか、または、2番目の式よりも短い場合は、$TRANSLATE は、3番目の式に対応する位置に置換がない2番目の式の中で発生するすべての文字を削除します。
プロセスがUTF-8モードで起動する場合、$TRANSVATE() のアルゴリズムは、UTF-8 エンコードとして文字列の引数を解釈します。それが不正な文字を見つけた時、VIEW " BADCHAR"を有効にして、$TRANSLATE() は、実行時エラーを生成します。
VIEW "BADCHAR" と $ZCHSETの設定に関係なく、$ZTRANSLATE() は、バイトシーケンス(むしろ文字シーケンスより)として引数を解釈し、すべてのバイト指向の$TRANSLATE() 操作を実行します。詳細な情報については、 “$ZTRanslate()” を参照してください。
$TRANSLATE() は、暗号化などタスクのためのツールを提供しています。大小文字変換の例については、^%LCASEと^%UCASEユーティリティルーチンを参照してください。
$TRANSLATEのアルゴリズムは、以下のように理解することができます:
$TRANSLATE() は、マッチするものを探し2番目の式に文字によりその文字を比較し、最初の式で各文字を評価します。もし2番目の式での一致がない場合、式の結果は変更していない文字が含まれています。
一致する文字が位置している時に、$TRANSLATE()はオリジナルの式の適切な置換を識別するために、2番目の式の中で一致の位置を使用します。もし2番目の式が3番目の式より多くの文字がある場合は、$TRANSLATE()は null でオリジナルの文字を置き換え、それによって、結果からそれを削除します。この原理の拡張によって、もし3番目の式が欠落している場合は、$TRANSLATE() は2番目の式で発生する最初の式からすべての文字を削除します。
例:
GTM>write $translate("ABC","CB","1") A1 GTM>
最初、$TRANSLATE() は2番目の式("CB")の中の"A"(最初の式の最初の文字、"ABC")を検索します。 "A"が2番目の式には存在しないので、それは結果では変化が表示されます。
次に、 $TRANSLATE() は2番目の式("CB")の中で"B"(最初の式の2番目の文字)を検索します。 "B" は2番目の式("CB")の中で2番目の位置を保持しているので、$TRANSLATE()は3番目の式の中の2番目の位置を保持している文字を検索します。3番目の式の中では2番目の文字がないので、$TRANSLATE()は、nullで "B" を置き換え、事実上結果からそれを削除します。
最後に、$TRANSLATE() は2番目の式("CB")の中で "C"(最初の式の3番目の文字)を検索し、最初の位置でそれを検出し、3番目の式の最初の位置にある数字の1にそれを置き換えます。翻訳結果は"A1"です。
注意 | |
---|---|
この例では、$TRANSLATE() によって行われた作業の説明を提供していますが、それは必ずしも、GT.Mが$TRANSLATE()$を実装する方法には対応していません。 |
例:
GTM>write $translate("A","AA","BC") B GTM>
この$TRANSLATE() の例は、最初の文字の位置を保持する2番目の式の中で最初に現れる "A" を見つけ、そして、3番目の式の最初の位置にある文字に置き換えます。
例:
GTM>write $translate("BACKUP","AEIOU") BCKP GTM>
$TRANSLATE() は、この例では2つのパラメータのみあるので、それは2番目の式の中の存在もまた最初の式で文字を見つけ、そして、結果からそれらを削除します。