第117章 Caché 函数大全 $ZSTRIP 函数
从指定字符串中移除字符类型和单个字符。
大纲
$ZSTRIP(string,action,remchar,keepchar)
参数
- string 要剥离的字符串。
- action 从字符串中剥离什么。一个动作由一个动作代码和一个或多个掩码代码组成。指定remchar时,掩码代码是可选的。操作指定为带引号的字符串。
- remchar 可选-要删除的一串特定字符值。如果操作不包含掩码代码,则remchar列出要删除的字符。如果操作包含掩码代码,则remchar会列出要删除的其他字符,这些字符未包含在操作参数的掩码代码中。
- keepchar 可选-由操作参数的掩码代码指定要删除的一串不删除的特定字符值。必须指定掩码代码以指定keepchar。
描述
$ZSTRIP函数从指定的字符串中删除字符类型或单个字符值。在action参数中,指定一个操作代码,指示要执行的删除操作的类型,以及(可选)一个掩码代码,指定要删除的字符的类型。您可以使用remchar参数指定要删除的单个字符值。 $ZSTRIP可以在同一操作中删除两种类型的字符(例如所有小写字母)和列出的字符值(例如字母“AEIOU”)。可以使用可选的remchar和keepchar参数,通过指定要删除或保留的单个字符值来修改操作参数的掩码代码的效果。
参数
action
一个字符串,指示要删除的字符,指定为动作代码,可以选择后面跟一个或多个掩码代码。
Action Codes
*删除所有与掩码代码匹配的字符。<去除与掩码代码匹配的前导字符。>删除与掩码代码匹配的结尾字符。<>去除与掩码代码匹配的前导和尾随字符。=去除与掩码代码匹配的重复字符。当遇到一系列重复的字符时,此代码将重复的字符剥离,从而保留单个实例。此代码仅去除重复的相邻字符。因此,从“aaaaaabc”中剥离“a”会产生“abc”,但是从“abaca”中剥离“a”将返回字符串“abaca”不变。重复字符测试区分大小写。<=>去除与掩码代码匹配的前导,尾随和重复字符。
动作代码可以由*字符组成,也可以由单个<,>或=字符组成。
要剥离字符类型,操作字符串应包含一个操作代码,后跟一个或多个掩码代码。要删除特定字符值,请省略掩码代码,并指定remchar值。可以同时指定掩码代码和remchar值。如果您既未指定掩码代码也未指定remchar值,则$ZSTRIP返回字符串。
Mask Codes
E剥离所有东西。A去除所有字母字符。P删除标点符号,包括空格。C剥离控制字符(0-31、127-159)。N去除数字字符。请注意,在应用$ZSTRIP之前,数字字符串不会转换为规范形式。L删除小写字母字符。U去除大写字母字符。W去除空格 ($C(9),$C(32),$C(160)).
掩码代码可以指定为大写或小写字符。
掩码代码字符前面可以带有一元不('),表示不要删除此类型的字符。在指定“一元不”掩码代码之前,必须指定至少一个没有“一元不”的掩码代码。所有没有一元非的掩码代码必须在掩码代码之前带有一元非。
remchar
要删除的特定字符,指定为带引号的字符串。可以以任何顺序指定这些remchar字符,并且允许重复。
如果未指定掩码代码,则$ZSTRIP会将action参数应用于remchar字符。如果指定掩码代码,则remchar指定要删除的一个或多个其他字符。例如,如果在action参数中指定要删除所有数字字符(“* N”),但同时也要删除字母“E”(用于表示科学计数法),则可以添加字符串“E”作为remchar参数,如第二个$ZSTRIP所示:
/// d ##class(PHA.TEST.Function).ZSTRIP()
ClassMethod ZSTRIP()
{
SET str="first:123 second:12E3"
WRITE $ZSTRIP(str,"*N"),!
WRITE $ZSTRIP(str,"*N","E")
}
keepchar
具体字符不要删除。例如,如果指定要删除所有空格和字母字符(*WA),但保留大写字母M,则可以将字符串“M”添加为keepchar参数。
示例
下面的示例删除所有数字字符。由于数字字符串不会转换为规范形式,因此不会删除字符+和E:
/// d ##class(PHA.TEST.Function).ZSTRIP1()
ClassMethod ZSTRIP1()
{
SET str="+123E4"
WRITE $ZSTRIP(str,"*N")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP1()
+E
在下面的示例中,第一个ZSTRIP`剥离除空白字符以外的所有标点符号。
/// d ##class(PHA.TEST.Function).ZSTRIP2()
ClassMethod ZSTRIP2()
{
SET str="ABC#$%^ DEF& *GHI***"
WRITE $ZSTRIP(str,"*P"),!
WRITE $ZSTRIP(str,"*P'W")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP2()
ABCDEFGHI
ABC DEF GHI
下面的示例去除了除小写字母('L)之外的所有字符。但是,该示例使用remchar参数剥离小写x并保留所有其他小写字符:
/// d ##class(PHA.TEST.Function).ZSTRIP3()
ClassMethod ZSTRIP3()
{
SET str="xXx-Aa BXXbx Cxc Dd xxEeX^XXx"
WRITE $ZSTRIP(str,"*E'L","x")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP3()
abcde
下面的示例去除了除小写字母('L)之外的所有字符。在这种情况下,该示例未指定remchar参数值(但指定了定界逗号),但指定了keepchar参数以保留大写A,B和C:
/// d ##class(PHA.TEST.Function).ZSTRIP4()
ClassMethod ZSTRIP4()
{
SET str="X-Aa BXXb456X CXc Dd XXEeX^XFFFfXX"
WRITE $ZSTRIP(str,"*E'L",,"ABC")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP4()
AaBbCcdef
下面的示例未指定掩码代码;它指定删除字符串中出现的字母“X”和“x”。返回字符串中的所有其他字符。
/// d ##class(PHA.TEST.Function).ZSTRIP5()
ClassMethod ZSTRIP5()
{
SET str="+x $1x,x23XX4XX.X56XxxxxxX"
WRITE $ZSTRIP(str,"*","Xx")
}
下面的示例未指定掩码代码;它指定删除字符“x”作为前导字符或尾随字符,并删除在字符串中出现的重复“x”:
/// d ##class(PHA.TEST.Function).ZSTRIP6()
ClassMethod ZSTRIP6()
{
SET str="xxxxx00xx0111xxx01x0000xxxxx"
WRITE $ZSTRIP(str,"<=>","x")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP6()
00x0111x01x0000
下面的示例除去所有数字,字母和标点符号,空格和小写字母除外。请注意,所有不带一元不的掩码代码必须在带一元不的掩码代码之前:
/// d ##class(PHA.TEST.Function).ZSTRIP8()
ClassMethod ZSTRIP8()
{
SET str="Aa66*&% B&$b Cc987 #Dd Ee"
WRITE $ZSTRIP(str,"*NAP'W'L")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP8()
a b c d e
下面的示例删除与掩码代码A匹配的前导,尾随和重复字符(所有字母字符):
/// d ##class(PHA.TEST.Function).ZSTRIP9()
ClassMethod ZSTRIP9()
{
SET str="ABC123DDDEEFFffffGG5555567HI JK"
WRITE $ZSTRIP(str,"<=>A")
}
DHC-APP> d ##class(PHA.TEST.Function).ZSTRIP9()
123DEFfG5555567HI
返回123DEFfG5555567HI; $ZSTRIP剥离前导字符(ABC),直到遇到掩码中未包含的类型的字符(1),然后从字符串末尾剥离尾随字符,直到遇到非掩码字符(空格)。掩码类型的重复字符减少为一次(DDDEE = DE);请注意,重复测试区分大小写(FFffff = Ff)。非掩码类型(55555)的重复字符不受影响。
下面的示例去除除十六进制数字0-9和A-F之外的所有字符:
/// d ##class(PHA.TEST.Function).ZSTRIP10()
ClassMethod ZSTRIP10()
{
SET str="123$ GYJF870B-QD @#%+"
WRITE $ZSTRIP(str,"*E'N",,"ABCDEF")
}
DHC-APP>d ##class(PHA.TEST.Function).ZSTRIP10()
123F870BD