如何在 REXX 中实现多个条件?
Posted
技术标签:
【中文标题】如何在 REXX 中实现多个条件?【英文标题】:How do I implement multiple conditions in REXX? 【发布时间】:2015-06-02 10:13:46 【问题描述】:我正在尝试整理一些 REXX 代码来实现以下目标。
检查给定输入(0007145547162165876, 0002734752467588968, 555729879318548867, 5559871342286434816)的给定条件(前 3 个字符是 000)。如果是这样,请对该输入执行一些计算(如下所示)。
b.如果条件不满足(即前 3 个字符不是 000 ),则对该输入执行不同的计算。
将两个计算的结果打印在一个文件中。
下面是我的第一个 if 条件语句的代码,它可以按需要工作。问题是实施第二个条件。我如何做到这一点?
if substr(rec.i,3,3) == '000'
then do
sum = d1+d2+d5+d6+d7+d8+d9+d10+d11+d12+d13+d14+d15+d16
sum = sum * 9
chksum = substr(sum,2,2)
chk = d3||d4
if chksum = chk
then do
say 'valid check sum' chksum 'in' rec.i
out.1=rec.i
"EXECIO 1 DISKW DATA (stem out."
end
else do
say '*** invalid check sum' chk 'in' rec.i
say '*** check sum should be' chksum 'in' rec.i
out.1=rec.i
"EXECIO 1 DISKW OUTFILE (stem out."
end
end
end
【问题讨论】:
Rexx 拥有else
。你甚至在你的代码中使用了它。你的实际问题是什么?顺便说一句,您没有查看记录的前三个字符。
真的吗?正确的做法是什么?也许这就是为什么它首先不起作用的原因。请帮忙。我编辑了问题,试图让问题更清楚。
把这个substr(rec.i,3,3)
改成这个substr(rec.i,1,3)
。在您显示的代码中,您有一个无与伦比的end
。尽管它应该可以工作,但您对 EXECIO 的输出有不必要的使用干变量。基本上,您的第一个 IF 失败了,而您认为它没有失败,所以无法弄清楚为什么 else 至少没有被采取行动。所以基本上这是一个妨碍你进步的错字。
只是小费,I1il
。乍一看,这些都非常相似。我避免使用单字符变量。每次你“看到” i,3,3 我认为你把 i 读成了 1。
【参考方案1】:
您可以查看 SELECT...WHEN...OTHERWISE 子句,看看是否对您有所帮助。 我用它来简化一些复杂的代码,在这些代码中我可能想要检查几种不同风格的输入。
注意,它不能直接替代 IF...THEN...ELSE 逻辑。
【讨论】:
以上是关于如何在 REXX 中实现多个条件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IBM Worklight 上的多个平台中实现条码扫描器?
PL/SQL-表和条件都不同时如何在单个查询中实现多条count语句