2011-04-18 58 views
0

大家好,COBOL程序不写文件

我有DISP =顺序文件(MOD,CATLG,CATLG) 我的程序做一个OPEN IO和它应该写入文件 然而,当作业成功结束,文件仍然是空的..

我错过了什么?

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

嗨,大师!我终于明白了。似乎我的COBOL版本不支持在I-O模式下写入...感谢您的帮助! – newbie 2011-04-19 03:54:02

回答

1

您需要在“WRITE”后关闭REJECT-FILE。

此外还有比'00'和'10'更多的可能的条件码。

我建议你用“OTHERWISE”替换“WHEN'10'”来捕获所有非零条件。

0

一对夫妇的事情你应该做的,使你的程序有点“安全”相对于文件操作:

1)检查并作出反应,FILE-STATUS上的每个文件的操作,打开,读取,写入和CLOSE。

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我们可能能够提供更多的帮助。

0

文件是否已被打开?如果你刚刚用MOD分配它,它将没有合适的EOF标记。有时你会看到人们使用IEBGENER将新的数据集分配一份0记录给他们以获得EOF标记。