If statement If语句中的COBOL编译错误:范围分隔符没有匹配的谓词,已被丢弃
我有下面的代码,其中我有3个if语句,我用END if关闭了所有语句,但仍然显示下面的错误If statement If语句中的COBOL编译错误:范围分隔符没有匹配的谓词,已被丢弃,if-statement,cobol,If Statement,Cobol,我有下面的代码,其中我有3个if语句,我用END if关闭了所有语句,但仍然显示下面的错误 ERROr Message: 17032 END-IF * 564-S****** ( 0)** ** A scope-delimiter did not have a matching verb and was discarded. 17074 END-IF * 56
ERROr Message:
17032 END-IF
* 564-S****** ( 0)**
** A scope-delimiter did not have a matching verb and was discarded.
17074 END-IF
* 564-S*********** ( 294)**
** A scope-delimiter did not have a matching verb and was discarded.
17075 END-IF.
* 564-S*********** ( 295)**
** A scope-delimiter did not have a matching verb and was discarded.
I-00.
D DISPLAY 'IN I-MTS-ACCOUNT-CHK'
IF NO-INDICATOR IN PR03-ALLOW-CLOSE-BAN-IND
THEN
EXIT SECTION.
END-IF
IF MTS IN MIGRATION-IND
IN PR02-BAN-INFO
THEN
IF MTS-MAPPING-ID IN PR02-BAN-INFO = ZERO
THEN
CALL "dcs_gt_subs_count" USING DL-CONTEXT
IN AR01-CONTEXT
BAN IN PR02-BAN-INFO
AR11-SUB-STATUS-RAS-LIST
AR12-SUB-TOT-COUNT
GIVING AR04-STATUS.
IF NOT SUCCESS IN AR04-STATUS
AND
NOT DL-KEY-NOTFOUND-S IN AR04-STATUS
THEN
SET CTB-MSG-ROUTINE-ERROR TO TRUE
MOVE "I-MTS-ACCOUNT-CHK" TO CTB-SECTION-NAME
MOVE "DCS_GT_SUBS_COUNT" TO CTB-ROUTINE-NAME
MOVE AR04-STATUS TO CTB-ROUTINE-STATUS
PERFORM X-HANDLE-ERROR
PERFORM Z-FINISH
END-IF
IF AR12-SUB-TOT-COUNT <> 0
THEN
SET NO-INDICATOR IN PR03-ALLOW-CLOSE-BAN-IND
TO TRUE
SET NOT-ALL-SUB-CANCEL IN PR04-EXCEPTION-REASON
TO TRUE
END-IF
END-IF
END-IF.
I-EXIT.
EXIT.
错误消息:
17032结束-如果
*564-S******(0)**
**作用域分隔符没有匹配的谓词,已被丢弃。
17074结束-如果
*564-S**********(294)**
**作用域分隔符没有匹配的谓词,已被丢弃。
17075结束-如果。
*564-S**********(295)**
**作用域分隔符没有匹配的谓词,已被丢弃。
I-00。
D显示“在I-MTS-ACCOUNT-CHK中”
如果PR03-ALLOW-CLOSE-BAN-IND中没有指示灯
然后
出口部分。
端到端IF
迁移-IND中的IF-MTS
在PR02-BAN-INFO中
然后
如果PR02-BAN-INFO中的MTS-MAPPING-ID=零
然后
使用DL-CONTEXT调用“dcs\u gt\u subs\u count”
在AR01-CONTEXT中
PR02-BAN-INFO中的BAN
AR11-SUB-STATUS-RAS-LIST
AR12-SUB-TOT-COUNT
给出AR04-1状态。
如果在AR04状态下未成功
及
非DL-KEY-NOTFOUND-S处于AR04-STATUS状态
然后
将CTB-MSG-ROUTINE-ERROR设置为TRUE
将“I-MTS-ACCOUNT-CHK”移至CTB-SECTION-NAME
将“DCS\U GT\U SUB\U计数”移动到CTB-ROUTION-NAME
将AR04-STATUS移至CTB-RUNTION-STATUS
执行X-HANDLE-ERROR
执行Z-FINISH
端到端IF
如果AR12-SUB-TOT-COUNT为0
然后
在PR03-ALLOW-CLOSE-BAN-IND中设置NO指示灯
真实
在PR04-EXCEPTION-REASON中设置NOT-ALL-SUB-CANCEL
真实
端到端IF
端到端IF
结束-如果。
I-出口。
出口
一个明显的错误是行
GIVING AR04-STATUS.
结束上一个if
Cobol风格的建议
,并在I-EXIT
之前将
单独放在一行上。在大型机上,您可以执行x all;x p'@$'所有(我认为这是一个很长的时间)将在这行末尾找到
END-IF
END-IF
.
I-EXIT.
然后
-删除IF NOT SUCCESS IN AR04-STATUS
AND NOT DL-KEY-NOTFOUND-S IN AR04-STATUS
SET CTB-MSG-ROUTINE-ERROR TO TRUE
MOVE "I-MTS-ACCOUNT-CHK" TO CTB-SECTION-NAME
MOVE "DCS_GT_SUBS_COUNT" TO CTB-ROUTINE-NAME
MOVE AR04-STATUS TO CTB-ROUTINE-STATUS
PERFORM X-HANDLE-ERROR
PERFORM Z-FINISH
END-IF
使您的
IF
语句更易于阅读。然后计算你的END-IF
语句。我建议您对代码进行更常规的格式化,这有助于发现这些类型的错误。
结束上一个ifI。我更喜欢结束行“continue.”,而不仅仅是一个句点。我认为这更清楚。