2011-04-18 48 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標記。