Программа COBOL не записывает файл - PullRequest
0 голосов
/ 18 апреля 2011

Привет всем,

У меня есть последовательный файл с 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 ]

1 голос
/ 18 апреля 2011

Вам нужно "ЗАКРЫТЬ" ФАЙЛ ОТКЛЮЧЕНИЯ после вашего "ЗАПИСИ".

Также существует гораздо больше возможных кодов условий, чем '00' и '10'.

Я быПредлагаем заменить «КОГДА 10» на «ИНОЕ», чтобы перехватить все ненулевые условия.

0 голосов
/ 19 апреля 2011

Был ли файл когда-либо открыт?Если вы только что добавили его в MOD, у него не будет надлежащего маркера EOF.Иногда вы увидите, как люди используют IEBGENER для выделения НОВЫХ наборов данных копии 0 записей для них, чтобы получить маркер EOF.

0 голосов
/ 19 апреля 2011

Несколько вещей, которые вы должны сделать, чтобы сделать вашу программу более "безопасной" в отношении файловых операций:

1) Проверять и реагировать на FILE-STATUS для каждой файловой операции, OPEN,ЧИТАЙТЕ, ПИШИТЕ и ЗАКРЫТЬ.

2) Обеспечить охват всех непредвиденных ситуаций.Вы

проверяете только «нормальные» условия и условия конца файла.Много других вещей может быть указано также.См. эту ссылку .

Похоже, вы пытаетесь читать и записывать в один и тот же физический файл.Все операции ввода / вывода (OPEN / READ / WRITE) относятся к одному и тому же файлу.Вы пытаетесь открыть файл для последовательного доступа и после достижения конца файла переключиться на IO, а затем добавить новую запись?

Было бы очень полезно, если бы вы также показали абзац FILE-CONTROL.Это покажет, как вы пытаетесь получить доступ к файлу.Я думаю, что могут быть проблемы с режимом доступа, указанным в FILE-CONTROL и OPEN / CLOSE / READ и WRITE в PROCEDURE DIVISION.Например, я не вижу, где вы указываете ключ записи для операции записи I-O.

Укажите параграф FILE-CONTROL и расскажите нам немного больше о том, что делает эта программа.Кроме того, дайте нам значение FILE-STATUS, которое мы могли бы предложить больше помощи на этом этапе.

...