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

文章目录

第六章 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

猜你喜欢

转载自blog.csdn.net/yaoxin521123/article/details/108252210