全部,
我有一个DISP =(MOD,CATLG,CATLG)的顺序文件 我的程序执行OPEN I-O,它应该写入文件 但是,当作业成功结束时,文件仍然是空的..
我错过了什么吗?FILE
REJECT DD DSN=FILEA,
DISP=(MOD,CATLG,CATLG),UNIT=TESTPACK,
DCB=(LRECL=109,BLKSIZE=0,RECFM=FB),
SPACE=(TRK,(3,1),RLSE)
COBOL Program:
FD REJECT-FILE
RECORDING MODE IS F
LABEL RECORDS ARE STANDARD
BLOCK CONTAINS 0 RECORDS
RECORD CONTAINS 109 CHARACTERS
DATA RECORD IS REJC-OUT-RECORD.
01 REJC-OUT-RECORD PIC X(109).
ADD-REJECTS-HEADER.
SKIP1
READ REJECT-FILE INTO RECORD-IN
EVALUATE WS-STATUS
WHEN '00'
CONTINUE
WHEN '10'
CLOSE REJECT-FILE
OPEN I-O REJECT-FILE
WRITE REJC-OUT-RECORD FROM WS-HEADER-REJ
END-EVALUATE.
答案 0 :(得分:1)
你需要在“写”之后“关闭”REJECT-FILE。
还有更多可能的条件代码而不是'00'和'10'。
我建议你用“OTHERWISE”替换“WHEN'10'”来捕捉所有非零条件。
答案 1 :(得分:0)
要使程序在文件操作方面更“安全”,您应该做的一些事情是:
1)在每个文件操作,OPEN,READ,WRITE和CLOSE上检查并对FILE-STATUS
作出反应。
2)为意外情况提供全面的服务。你
仅检查“正常”和“文件结束”条件。还可能会指出很多其他事情。见this reference。
看起来您可能正在尝试读取和写入同一物理文件。所有I / O操作(OPEN / READ / WRITE)都指向同一个文件。您是否尝试打开文件以进行顺序访问,并在到达文件结尾时切换到I-O然后添加 新纪录?
如果您同时显示FILE-CONTROL
段,那将非常有用。这将指示您尝试访问该文件的方式。我认为FILE-CONTROL
下指定的访问模式和PROCEDURE DIVISION
中的OPEN / CLOSE / READ和WRITE可能存在问题。例如,我没有看到您为I-O
写操作指定记录键的位置。
提供FILE-CONTROL
段落,并告诉我们更多关于该计划正在做什么的内容。另外,给我们FILE-STATUS
的价值,我们可能会在那时提供更多帮助。
答案 2 :(得分:0)
文件EVER是否已打开?如果您刚刚使用MOD分配它,它将没有适当的EOF标记。有时您会看到人们使用IEBGENER为他们分配新数据集的副本0记录,以便写入EOF标记。