Caché ObjectScript Functions中$CHAR $C用法以及注意点

168 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

一点说明

首先在Caché ObjectScript Functions中方法是不分大小写的.所以$CHAR $C或者$char $c都是一样的。下文统一用$c

具体使用方法

$c的用法是将整数值表达式转换成相应的 ASCIIUnicode 字符。

$c(1)返回的字符是 SOH(start of headline). image.png

再如$c(65)返回的字符是大写 A.

以下是几种特殊的用法:

1) 整数值表达式为逗号分隔的列表,返回对应相应的字符列表。

$c(65,67)返回的字符是大写AC.

2) 整数值表达式最大可以到65535

大于 65535 的值则返回空字符串。

3) 整数值表达式为负值,此时也返回空字符串。

如:w $c(-1),!

那在整数值表达式为逗号分隔的列表中,$c也自动忽略负数。

如:w $c(65,-66,67),! //AC

4) 整数值表达式等于960,返回 π 字符串。

相关函数

  • $ASCII 函数是 $CHAR 的逆函数,用法是把 ASCII 转换成对应的整数值。 如:
w $c(45),!       //-
w $a($c(45)),!   //45

转换大小写方法

以下是转换大小写方法,其中转换成全小写时,输入Type为"l"。

其中涉及到的函数有:

  • $MATCH方法为正则表达方法,下节可以讲一下。

  • $l方法是获取字符串长度的方法。

/// w ##class(User.Test).test8("111")
/// w ##class(User.Test).test8("sAdzbFsgh")   SADZBFSGH
/// w ##class(User.Test).test8("sAdzbFsgh","l")   sadzbfsgh
ClassMethod test8(Str As %String, Type As %String = "U")
{	
    q:$d(Str)=0
    if ($MATCH(Str,"[a-zA-Z]+")=0){
        w "必须是全英文字符",!
        q ""
    }
    set ret=""
    For i = 1:1:$l(Str) {
        if ((Type="L")&&($a(Str,i)<90)){
                set ret=ret_$c($a(Str,i)+32)
        }elseif ((Type="U")&&($a(Str,i)>96)){
                set ret=ret_$c($a(Str,i)-32)
        }else{
                set ret=ret_$c($a(Str,i))
        }
    }
    q ret
}

代码地址 test7 test8