扩展打开(COBOL)

扩展打开(COBOL),cobol,Cobol,我最近接到一个任务,使用“EXTEND OPEN”命令将数据添加到已经存在的文件中。虽然我认为我理解了它所做的事情,但我发现我的程序遇到了一个障碍,给了我这个错误:“148错误的开放模式或写入访问模式”。这是一个简单的程序,意味着只向主文件添加一个新的条目文件,但我不能完全理解它。以下是我所拥有的: DATA DIVISION. FILE SECTION. FD OLD-MASTER-IN. 01 OLD-MASTER-REC-IN. 05 O-ST

我最近接到一个任务,使用“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.

任何帮助都将不胜感激。

我知道了。我现在真的很笨。似乎我扩展/读取了错误的文件。我真傻。假设代码如下所示:

   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.

如果您使用的是现代编译器,那么您的代码可能不像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

当然,这里的检查没有错误,但这是一个很大的主题。

很好的触感,不怕发布错误。@nmichaels:是的。金融系统的大部分仍然依靠大型钢铁公司运作。如果你想在一个利基市场上做维护编码赚大钱,Cobol是一个不错的选择。当然,你们这些年轻的打盹儿们都想变得时髦,用Cobol编码就像穿着粗花呢西装和格子袜子,所以你们不会用一根十英尺长的杆子去碰它,是吗?@Robert:与其说你们想变得时髦,不如说你们想使用现代语言特征,像小写字母和像
+
@nmichaels这样的新奇操作符一样,Cobol几十年来一直支持小写和无格式源代码。而且像+-*/这样的新操作符也已经出现了同样长的时间了。@Joe:好吧,这并不是像今天这样对这种语言的真正批评,但我想保持轻声细语以避免火焰。我认为现在是结束这篇文章的好时机。这是一个打字错误,请参阅OP的自我回答。