我的任务是从第一个文件中读取记录并从第二个文件中检查相应的记录并显示它。 这是我的代码:
PERFORM READ-PARA1 THRU END-PARA UNTIL WS-END-OF-FILE.
PERFORM READ-PARA2 THRU END-PARA UNTIL WS-END-OF-FILE.
CLOSE FILEX.
CLOSE FILEY.
STOP RUN.
READ-PARA1.
READ FILEX
AT END
MOVE 'Y' TO WS-EOF-IND.
DISPLAY SPACE
DISPLAY OCODE1,' 'ACODE1,' 'POLNO1,' 'EDATE1,
' 'PHOLD1,' 'LOCATION1,' '.
READ-PARA2.
READ FILEY
READ FILEY
AT END
PERFORM READ-PARA3 UNTIL R1 = 4.
IF POLNO1 = POLNO2
DISPLAY ' ',
LICNO1,' 'VMAKE1,' 'VMODEL,' 'YEAR,' 'PREM
ELSE
READ FILEY NEXT RECORD
GO TO READ-PARA2.
END-PARA.
EXIT.
READ-PARA3.
CLOSE FILEY.
OPEN INPUT FILEY.
READ FILEY
AT END
MOVE 'Y' TO WS-EOF-IND.
ADD 1 TO R1.
IF POLNO1 = POLNO2
DISPLAY ' ',
DISPLAY ' ',
LICNO1,' 'VMAKE1,' 'VMODEL,' 'YEAR,' 'PREM
ELSE
READ FILEY NEXT RECORD
GO TO READ-PARA3.
此代码仅用于查找文件1的第一个记录的相应记录,但是对于休息,它只显示空白,并且都是顺序文件。
答案 0 :(得分:4)
我真的不知道在这里说什么,除非尝试使用最新版本重新编写您的程序 编码实践 - 您当前的代码是COBOL-85编码风格的前/后混合,因此很难遵循。尝试重写 以下内容 目标。
PERFORM THRU
。 PERFORM
很好,THRU
位是COBOL-85之前的回归,不应再使用了。如果你需要在循环中预先形成几个段落/部分,请尝试以下方法:
PERFORM UNTIL some-condition PERFORM PARA-A PEROFMR PARA-B END-PERFORM
END-IF
,END-PERFORM
等。GO TO
。很少有地方可以使用GO TO
。在这种大小/复杂程度的程序中,永远不应该使用它。EXIT
的段落。正确使用示波器终结器时(参见第1点和第2点)。 EXIT
NEXT SENTENCE
。这也是COBOL-85之前的回归,在技术上已经过时了。如果您设法使用上述指南重新编写,您可能会发现您的问题更易于发现和修复。再试一次。我认为第二次尝试可能会好得多。