文章目录

  • 第七十一章 Caché 函数大全 $WFIND 函数
  • 大纲
    • 参数
  • 描述
  • 示例

 

 
第七十一章 Caché 函数大全 $WFIND 函数

通过值查找子字符串,并返回整数,指定其在字符串中的结束位置,从而识别代理对。

大纲
$WFIND(string,substring,position)
$WF(string,substring,position)

参数

  • string 要搜索的目标字符串。它可以是变量名,数值,字符串文字或任何可解析为字符串的有效ObjectScript表达式。
  • substring 要搜索的子字符串。它可以是变量名,数字值,字符串文字或任何可解析为字符串的有效ObjectScript表达式。
  • position 可选-目标字符串中开始搜索的位置。它必须是一个正整数。
描述

$WFIND返回一个整数,该整数指定字符串中子字符串的结束位置。在计算位置时,它将每个代理对视为一个字符。 $WFIND在功能上与$FIND相同,除了$WFIND识别代理对。它将代理对视为单个字符。可以使用$WISWIDE函数确定字符串是否包含代理对。

代理对是一对16位Caché字符元素,它们一起编码一个Unicode字符。代理对用于代表某些表意文字,这些表意文字用于中文,日文汉字和韩文汉字。 (大多数常用的中文,汉字和汉字字符由标准的16位Unicode编码表示。)代理对为日语JIS X0213:2004(JIS2004)编码标准和中文GB18030编码标准提供了Caché支持。

代理对由在十六进制范围D800至DBFF中的高阶16位字符元素和在十六进制范围DC00至DFFF中的低阶16位字符元素组成。

$WFIND函数将代理对视为单个字符。 $FIND函数将一个代理对计为两个字符。在所有其他方面,$WFIND和$FIND在功能上是相同的。但是,由于$FIND通常比$WFIND快,因此对于不太可能遇到代理对的所有情况,$FIND是更可取的。

示例

以下示例显示$WFIND如何将代理对作为返回值中的单个字符进行计数:

/// d ##class(PHA.TEST.Function).WFIND()
ClassMethod WFIND()
{
	IF $SYSTEM.Version.IsUnicode()  {
		SET spair=$CHAR($ZHEX("D806"),$ZHEX("DC06"))
		SET str="ABC"_spair_"DEF"
		WRITE !,$FIND(str,"DE")," $FIND location in string"
		WRITE !,$WFIND(str,"DE")," $WFIND location in string"
	} ELSE {
		WRITE "This example requires a Unicode installation of Caché"
	}
}
DHC-APP>d ##class(PHA.TEST.Function).WFIND()
 
8 $FIND location in string
7 $WFIND location in string

以下示例显示$WFIND如何在位置参数中将代理对作为单个字符进行计数:

/// d ##class(PHA.TEST.Function).WFIND1()
ClassMethod WFIND1()
{
	IF $SYSTEM.Version.IsUnicode()  {
		SET spair=$CHAR($ZHEX("D806"),$ZHEX("DC06"))
		SET str="ABC"_spair_"DEF"
		WRITE !,$FIND(str,"DE",6)," $FIND location in string"
		WRITE !,$WFIND(str,"DE",6)," $WFIND location in string"
	} ELSE {
		WRITE "This example requires a Unicode installation of Caché"
	}
}
DHC-APP>d ##class(PHA.TEST.Function).WFIND1()
 
8 $FIND location in string
0 $WFIND location in string