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