第十六章 Caché 函数大全 $FIND 函数

270 阅读1分钟

第十六章 Caché 函数大全 $FIND 函数

按值查找子字符串,并返回一个整数,指定其在字符串中的结束位置。

大纲

$FIND(string,substring,position)
$F(string,substring,position)

参数

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

描述

$FIND返回一个整数,该整数指定字符串中子字符串的结束位置。 $FIND在字符串中搜索子字符串。 $FIND区分大小写。如果找到子字符串,则$FIND返回子字符串后第一个字符的整数位置。如果未找到子字符串,则$FIND返回值0。

因为$FIND返回字符在子字符串之后的位置,所以当子字符串是与字符串$FIND的第一个字符匹配的单个字符时,返回2。当子字符串是空字符串(“”)时,$FIND返回1。

可以包括位置选项以指定搜索的起始位置。如果position大于字符串中的字符数,则$FIND返回值0。

$FIND计算characters,而不是bytes。因此,它可以与包含8位或16位(Unicode)字符的字符串一起使用。

示例

例如,如果变量var1包含字符串“ABCDEFG”,变量var2包含字符串“BCD”,则下面的$find返回值5,指示var2字符串后面的字符(“E”)的位置:

DHC-APP>SET var1="ABCDEFG",var2="BCD"
 
DHC-APP>WRITE $FIND(var1,var2)
5

下面的示例返回4,即字符的位置紧靠子字符串“FOR”的右侧。

DHC-APP>SET X="FOREST"
 
DHC-APP>WRITE $FIND(X,"FOR")
4

在以下示例中,$FIND将搜索不在字符串中的子字符串、null子字符串以及作为字符串第一个字符的子字符串。这些示例分别返回0、1和2:

DHC-APP>WRITE !,$FIND("aardvark","z")
 
0
DHC-APP>WRITE !,$FIND("aardvark","")
 
1
DHC-APP>WRITE !,$FIND("aardvark","a")
 
2

以下示例显示了字符串为空字符串时发生的情况:

DHC-APP>WRITE !,$FIND("","z")
 
0
DHC-APP>WRITE !,$FIND("","")
 
1

下面的示例返回14,即字符的位置紧靠X中第七个字符后第一个出现的“R”的右侧。

DHC-APP>SET X="EVERGREEN FOREST",Y="R"
 
DHC-APP>WRITE $FIND(X,Y,7)
14

在下面的示例中,$FIND在字符串中的最后一个字符之后开始搜索。它返回零(0):

DHC-APP>SET X="EVERGREEN FOREST",Y="R"
 
DHC-APP>WRITE $FIND(X,Y,20)
0

以下示例使用$FIND$REVERSE从字符串末尾执行搜索操作。此示例在一行文本中查找字符串的最后一个示例。它将该字符串的位置返回为33:

DHC-APP>SET line="THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG."
 
DHC-APP>SET position=$LENGTH(line)+2-$FIND($REVERSE(line),$REVERSE("THE"))
 
DHC-APP>WRITE "The last THE in the line begins at ",position
The last THE in the line begins at 33

下面的示例使用名称间接返回6,即紧靠子字符串“THIS”右侧的字符位置:

DHC-APP>SET Y="x",x="""THIS IS A TEST"""
 
DHC-APP>WRITE $FIND(@Y,"THIS")
6

注意

FIND,FIND, EXTRACT, PIECE,PIECE, LIST

  • $FIND按值查找子字符串并返回位置。
  • $EXTRACT按位置定位子字符串并返回子字符串值。
  • $PIECE通过分隔符字符或分隔符字符串定位子字符串,并返回子字符串值。
  • $LIST对特殊编码的字符串进行操作。它通过子字符串计数查找子字符串并返回子字符串值。

$FIND$EXTRACT$LENGTH$PIECE函数对标准字符串进行操作。各种$LIST函数对与标准字符串不兼容的编码字符串进行操作。唯一的例外是$LIST的一个参数和两个参数形式,它们以编码字符串作为输入,但将单个元素值作为标准字符串输出。

代理对

$FIND无法识别代理对。代理对用于表示某些中文字符并支持日语JIS2004标准。可以使用$WISWIDE函数确定字符串是否包含代理对。 $WFIND函数可以识别并正确解析代理对。 $FIND$WFIND相同。但是,由于$FIND通常比$WFIND快,因此对于不太可能遇到代理对的所有情况,$FIND是更可取的。