文章目录
-
第六十六章 Caché 函数大全 $TRANSLATE 函数 - 大纲
-
- 参数
- 描述
-
- `$TRANSLATE`和`$REPLACE`
- 示例
第六十六章 Caché 函数大全 $TRANSLATE 函数
返回一个新字符串,该字符串包含源字符串的逐字符替换。
大纲
$TRANSLATE(string,identifier,associator)
$TR(string,identifier,associator)
参数
- string 源字符串。它可以是数值,字符串文字,变量名称或任何有效的ObjectScript表达式。
- identifier 由一个或多个要在字符串中搜索的字符组成的字符串。它可以是数字值,字符串文字,变量名称或任何有效的ObjectScript表达式。
- associator 可选-由一个或多个替换字符组成的字符串,这些字符在位置上对应于标识符中的每个字符。它可以是数值,字符串文字,变量名称或任何有效的ObjectScript表达式。
描述
$TRANSLATE
函数返回一个新字符串,该字符串包含源字符串的逐字符替换。 $TRANSLATE
操作可以替换多个不同的字符,但是只能(最多)用一个字符替换一个字符。它一次处理一个字符串字符的字符串参数。它将输入字符串中的每个字符与标识符参数中的每个字符进行比较。如果$TRANSLATE
找到一个匹配项,它将对该字符执行以下操作之一:
-
$TRANSLATE
的两参数形式从返回的字符串中删除标识符参数中的那些字符。 -
$TRANSLATE
的三参数形式将字符串中找到的标识符字符替换为关联参数中位置上对应的字符,并返回结果字符串。替换是基于字符而不是字符串执行的。如果identifier参数包含的字符少于associator参数,则忽略associator参数中多余的字符。如果标识符参数包含的字符比关联器参数更多,则标识符参数中多余的字符将在输出字符串中删除。
$TRANSLATE
区分大小写。
字符串,标识符和关联器参数通常指定为带引号的字符串。如果这些参数之一的值是纯数字,则不需要字符串引号;但是,由于Caché在将参数值提供给$TRANSLATE
之前会将参数值转换为规范数,因此不建议使用此用法。
$TRANSLATE
和$REPLACE
$TRANSLATE
执行字符对字符的匹配和替换。 $REPLACE
执行字符串对字符串的匹配和替换。 $REPLACE
可以将一个或多个字符的单个指定子字符串替换为另一个子字符串,或者删除指定子字符串的多个实例。 $TRANSLATE
可以用对应的指定替换字符替换多个指定字符。
$TRANSLATE
匹配始终区分大小写; $REPLACE
匹配默认情况下区分大小写,但可以不区分大小写地调用。 $TRANSLATE
始终替换源字符串中的所有匹配项; $REPLACE
可以指定匹配的起点和/或要执行的替换次数。
示例
以下示例显示了使用$TRANSLATE
的两种方法。第一个$TRANSLATE
不会更改输入字符串的值。第二个$TRANSLATE
通过将输入字符串值设置为等于函数的返回值来更改它:
/// d ##class(PHA.TEST.Function).TRANSLATE()
ClassMethod TRANSLATE()
{
SET str="The quick brown fox"SET newstr=$TRANSLATE(str,"qbf","QBF")WRITE "source string: ",str,!,"new string: ",newstr,!!// 创建一个新的字符串,不更改str值SET str=$TRANSLATE(str,"qbf","QBF")WRITE "revised string: ",str// 创建一个新的字符串并将字符串替换为新的字符串值
}
DHC-APP>d ##class(PHA.TEST.Function).TRANSLATE()
source string: The quick brown fox
new string: The Quick Brown Foxrevised string: The Quick Brown Fox
在下面的示例中,两个参数$TRANSLATE
基于当前语言环境的设置删除数字组分隔符:
/// d ##class(PHA.TEST.Function).TRANSLATE1()
ClassMethod TRANSLATE1()
{
AppropriateInputSET ds=##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")w "ds ",ds,!IF ds="." {
SET x="+1,462,543.33"} ELSE {
SET x="+1.462.543,33"}
TranslateNumWRITE !,"before translation ",x,!SET ngs=##class(%SYS.NLS.Format).GetFormatItem("NumericGroupSeparator")w "ngs ",ngs,!IF ngs="," {
SET x=$TRANSLATE(x,",") } ELSEIF ngs="." {
SET x=$TRANSLATE(x,".") } ELSEIF ngs=" " {
SET x=$TRANSLATE(x," ") } ELSE {
WRITE "Non-standard NumericGroupSeparator:", ngsRETURN }WRITE !,"after translation ",x
}
DHC-APP>d ##class(PHA.TEST.Function).TRANSLATE1()
ds .before translation +1,462,543.33
ngs ,after translation +1462543.33
在下面的示例中,三参数$TRANSLATE
用斜杠替换了各种Date Separator
字符。请注意,关联者必须指定“/”
和标识符中的字符数一样多:
/// d ##class(PHA.TEST.Function).TRANSLATE2()
ClassMethod TRANSLATE2()
{
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),!}
}
DHC-APP>d ##class(PHA.TEST.Function).TRANSLATE2()
x(1) :06/23/2014
x(2) :06/24/2014
x(3) :06/25/2014
x(4) :06/26/2014
x(5) :06/27/2014
在以下示例中,三参数$TRANSLATE
通过将重音字母替换为非重音字母并删除问题和感叹词前缀标点来将西班牙语“简化”为基本ASCII
:
/// d ##class(PHA.TEST.Function).TRANSLATE3()
ClassMethod TRANSLATE3()
{
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
}
DHC-APP>d ##class(PHA.TEST.Function).TRANSLATE3()
Spanish:
??Sabes lo que ocurrirá en el a??o 2016?
Identifier: áéí??óú????
Associator: aeinou
Spanglish:
Sabes lo que ocurrira en el ano 2016?
不用说,这不是推荐用于实际西班牙语文本的转换。