Расширить Open (COBOL) - PullRequest
       6

Расширить Open (COBOL)

2 голосов
/ 16 февраля 2011

Недавно я получил назначение использовать команду «EXTEND OPEN» для добавления данных в уже существующий файл. Хотя я подумал, что понял, что он сделал, я обнаружил, что моя программа сталкивается с ошибкой, сообщая мне об ошибке: «148 Неправильный режим открытия или режим доступа для записи». Это простая программа, предназначенная для добавления только одного нового файла записей в основной файл, но я не могу его получить. Вот что у меня есть:

   DATA DIVISION.
   FILE SECTION.

   FD  OLD-MASTER-IN.
   01  OLD-MASTER-REC-IN.
       05  O-STATE-ABREV-IN                PIC XX.
       05                                  PIC X.
       05  O-STATE-NAME-IN                 PIC X(17).

   FD  TRANS-FILE-IN.
   01  TRANS-REC-IN.
       05  N-STATE-ABREV-IN                PIC XX.
       05                                  PIC X.
       05  N-STATE-NAME-IN                 PIC X(17).

   WORKING-STORAGE SECTION.
   01  ARE-THERE-MORE-RECORDS              PIC X(3)  VALUE 'YES'.

   PROCEDURE DIVISION.
   100-MAIN.
       OPEN INPUT OLD-MASTER-IN
            EXTEND TRANS-FILE-IN

       PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
           READ OLD-MASTER-IN
               AT END
                   MOVE 'NO' TO ARE-THERE-MORE-RECORDS
               NOT AT END
                   PERFORM 200-REGULAR-UPDATE
           END-READ
       END-PERFORM

       CLOSE OLD-MASTER-IN
             TRANS-FILE-IN
       STOP RUN.

   200-REGULAR-UPDATE.
       WRITE OLD-MASTER-REC-IN FROM TRANS-REC-IN.

Любая помощь будет оценена.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Я понял это. Я действительно глупый сейчас. Кажется, я расширил / прочитал не тот файл. Дурак я. Код должен выглядеть следующим образом:

   PROCEDURE DIVISION.
   100-MAIN.
       OPEN INPUT TRANS-FILE-IN
            EXTEND OLD-MASTER-IN

       PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
           READ TRANS-FILE-IN
               AT END
                   MOVE 'NO' TO ARE-THERE-MORE-RECORDS
               NOT AT END
                   PERFORM 200-REGULAR-UPDATE
           END-READ
       END-PERFORM

       CLOSE TRANS-FILE-IN
             OLD-MASTER-IN
       STOP RUN.

   200-REGULAR-UPDATE.
       WRITE OLD-MASTER-REC-IN FROM TRANS-REC-IN.
0 голосов
/ 23 февраля 2011

Если вы пишете с помощью современного компилятора, ваш код может быть написан так, чтобы не выглядеть так, как он был написан в 70-х годах.

Вот пример того, что вы могли бы сделать:

OPEN INPUT TRANS-FILE-IN
OPEN EXTENT OLD-MASTER-IN

PERFORM UNTIL EXIT
    READ TRANS-FILE-IN
        AT END
        EXIT PERFORM
    END-READ
    WRITE OLD-MASTER-REC-IN FROM TRANS-REC-IN
END-PERFORM

CLOSE TRANS-FILE-IN
CLOSE OLD-MASTER-IN

Конечно, здесь нет проверки ошибок, но это большая тема.

...