美文网首页
第六章 Caché 函数大全 $CASE 函数

第六章 Caché 函数大全 $CASE 函数

作者: Cache技术分享 | 来源:发表于2020-08-27 08:43 被阅读0次

第六章 Caché 函数大全 $CASE 函数

比较表达式并返回第一个匹配大小写的值。

大纲

$CASE(target,case:value,case:value,...,:default)

参数

  • target 其值要与大小写匹配的文字或表达式。
  • case 文字或表达式的值应与目标计算的结果相匹配。
  • value 成功匹配相应大小写后要返回的值。
  • default 可选-如果没有大小写匹配目标,则返回的值。

描述

$CASE函数将目标与案例列表(文字或表达式)进行比较,并返回第一个匹配案例的值。可以指定无数个case:value对。$Case按照指定的顺序进行匹配(从左到右);当遇到第一个完全匹配项时,匹配停止。

如果没有匹配的大小写,则返回默认值。如果没有匹配的大小写且未指定默认值,则Caché会发出错误。

Caché允许不带case:value对指定$CASE。无论目标值如何,它始终返回默认值。

参数

target

$CASE计算一次该表达式,然后按从左到右的顺序将结果与每种情况匹配。

case

大小写可以是文字或表达式;文字的匹配要比匹配的表达式有效得多,因为文字可以在编译时求值。每个CASE必须与一个值配对。可以指定数量不受限制的案例和值对。

value

值可以是文字或表达式。使用$CASE作为GOTO命令或DO命令的参数会限制值,如下所示:

  • 当将$CASE语句与GOTO命令一起使用时,每个值都必须是有效的行标签。它不能是表达式。
  • 当将$CASE语句与DO命令一起使用时,每个值必须是一个有效的DO参数。这些DO参数可以包含参数。

default

默认指定为case:value对,但逗号(用于分隔对)和冒号(用于配对项)之间没有指定大小写。默认是可选的。如果指定,它将始终是$CASE函数中的最终参数。默认值遵循与value参数相同的GOTODO限制。

如果没有匹配的大小写且未指定默认值,则Caché会发出<ILLEGAL VALUE>错误。

示例

以下示例采用星期几,并返回相应的日期名称。请注意,提供了默认值“entry error”:

/// d ##class(PHA.TEST.Function).Case()
ClassMethod Case()
{
    SET daynum=$ZDATE($HOROLOG,10)
    WRITE $CASE(daynum,
                1:"Monday",2:"Tuesday",3:"Wednesday",
                4:"Thursday",5:"Friday",
                6:"Saturday",7:"Sunday",:"entry error")
}
DHC-APP>d ##class(PHA.TEST.Function).Case()
Wednesday

下面的示例将棒球击球手获得的垒数作为输入,并写出适当的棒球术语:

/// d ##class(PHA.TEST.Function).Case1()
ClassMethod Case1()
{
    SET hit=$RANDOM(5)
    SET atbat=$CASE(hit,1:"single",2:"double",3:"triple",4:"home run",:"strike out")
    WRITE hit," = ",atbat
}

DHC-APP>d ##class(PHA.TEST.Function).Case1()
0 = strike out
DHC-APP>d ##class(PHA.TEST.Function).Case1()
2 = double
DHC-APP>d ##class(PHA.TEST.Function).Case1()
3 = triple
DHC-APP>d ##class(PHA.TEST.Function).Case1()
1 = single
DHC-APP>d ##class(PHA.TEST.Function).Case1()
4 = home run

以下示例使用$CASE作为do命令参数。它调用适用于EXP指数值的例程:

/// d ##class(PHA.TEST.Function).Case2()
ClassMethod Case2()
{
Start  ; Raise an integer to a randomly-selected power.
    SET exp=$RANDOM(6)
    SET num=4
    DO $CASE(exp,0:NoMul(),2:Square(num),3:Cube(num),:Exponent(num,exp))
    WRITE !,num," ",result,!
    RETURN
Square(n)
    SET result=n*n
    SET result="Squared = "_result
    RETURN
Cube(n)
    SET result=n*n*n
    SET result="Cubed = "_result
    RETURN
Exponent(n,x)
    SET result=n
    FOR i=1:1:x-1 { SET result=result*n }
    SET result="exponent "_x_" = "_result
    RETURN
NoMul()
    SET result="multiply by zero"
    RETURN
}
DHC-APP>d ##class(PHA.TEST.Function).Case2()
 
4 exponent 5 = 1024
 
DHC-APP>d ##class(PHA.TEST.Function).Case2()
 
4 exponent 1 = 4
 
DHC-APP>d ##class(PHA.TEST.Function).Case2()
 
4 Squared = 16
 
DHC-APP>d ##class(PHA.TEST.Function).Case2()
 
4 multiply by zero

下面的示例测试字符输入是字母还是其他字符:

/// d ##class(PHA.TEST.Function).Case3()
ClassMethod Case3()
{
    READ "Input a letter: ",x,!
    SET chartype=$CASE(x?1A,1:"letter",:"other")
    WRITE chartype
}
DHC-APP>d ##class(PHA.TEST.Function).Case3()
Input a letter: a
letter
DHC-APP>d ##class(PHA.TEST.Function).Case3()
Input a letter: 1
other

下面的示例使用$CASE确定要返回哪个下标变量:

/// d ##class(PHA.TEST.Function).Case4()
ClassMethod Case4()
{
    SET dabbrv="W"
    SET wday(1)="Sunday",wday(2)="Monday",wday(3)="Tuesday",
       wday(4)="Wednesday",wday(5)="Thursday",wday(6)="Friday",wday(7)="Saturday"
    WRITE wday($CASE(dabbrv,"Su":1,"M":2,"Tu":3,"W":4,"Th":5,"F":6,"Sa":7))
}

DHC-APP>d ##class(PHA.TEST.Function).Case4()
Wednesday

以下示例未指定case:value对。它返回默认字符串“not defined”:

/// d ##class(PHA.TEST.Function).Case5()
ClassMethod Case5()
{
    SET dummy=3
    WRITE $CASE(dummy,:"not defined")
}
DHC-APP>d ##class(PHA.TEST.Function).Case5()
not defined

相关文章

网友评论

      本文标题:第六章 Caché 函数大全 $CASE 函数

      本文链接:https://www.haomeiwen.com/subject/hhnqsktx.html