COBOL程序不写文件

时间:2011-04-18 08:26:31

标签: file cobol

全部,

我有一个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.

3 个答案:

答案 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标记。