是否可以将 COBOL 文件描述符传递给另一个程序
Is it possible to pass a COBOL File Descriptor to another program
我可以将主 COBOL 代码中的文件控制 FD 条目传递到过程中吗?
如果是,从主 COBOL 程序调用过程时需要传递什么?
在FD
中使用EXTERNAL
关键字,允许运行单元内的多个程序访问同一个文件。 运行 时间不是“传递”FD
,而是将单独的程序指向相同的 FD
.
SELECT
和 FD
必须描述同一个文件。
下面,pgm-main
打开和关闭文件,pgm-1
写入文件,pgm-2
读取文件。
program-id. pgm-main.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
procedure division.
open output f
call "pgm-1"
close f
open input f
call "pgm-2"
close f
goback
.
end program pgm-main.
program-id. pgm-1.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
working-storage section.
1 x comp pic 99.
procedure division.
perform varying x from 1 by 1
until x > 5
move x to f-rec
write f-rec
end-perform
goback
.
end program pgm-1.
program-id. pgm-2.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
working-storage section.
1 pic x value "0".
88 eof value "1".
procedure division.
perform until eof
read f
end
set eof to true
not end
display f-rec
end-read
end-perform
goback
.
end program pgm-2.
输出:
01
02
03
04
05
这是一种替代方法,而不是对问题的直接回答。它是 Cobol 程序员可能会遇到并且应该知道的一种方法。
我添加以供参考。
另一种传递文件控制的方法是使用 File-Driver
或 File-Interface
模块来执行文件的 Reading/Writing。各个应用程序调用这个程序,如果一个文件在多个地方使用,这种方法最有效。
File-Driver
的优点包括
- 您可以使链接中的文件记录区域比文件记录大小大得多。
该文件可能有一个 50 字节的记录和 20 字节的填充符,您可以使 File-Record-Linkage 区域为 500 字节。这可能会减少将来的维护。
- 一般控制记录/页眉/页脚记录可以在
File-Driver
程序中写入/检查。应用程序不需要知道任何控制记录。在一个站点上,我需要向现有文件添加 Header/Footer 和文件验证。我所需要做的只是更改 Code Generation parameters
、重新生成 File-Driver
和一些基本测试。无需更改程序
File-Drivers
几乎相同。你可以
- 在 Copybooks 中存储大量 Working Storage 和 Code 并使用 Copy replacing .
- 使用代码生成
- 标准复制修改
- 文件驱动程序可以独立于调用程序进行测试。这在您使用文件验证时很方便。
我可以将主 COBOL 代码中的文件控制 FD 条目传递到过程中吗?
如果是,从主 COBOL 程序调用过程时需要传递什么?
在FD
中使用EXTERNAL
关键字,允许运行单元内的多个程序访问同一个文件。 运行 时间不是“传递”FD
,而是将单独的程序指向相同的 FD
.
SELECT
和 FD
必须描述同一个文件。
下面,pgm-main
打开和关闭文件,pgm-1
写入文件,pgm-2
读取文件。
program-id. pgm-main.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
procedure division.
open output f
call "pgm-1"
close f
open input f
call "pgm-2"
close f
goback
.
end program pgm-main.
program-id. pgm-1.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
working-storage section.
1 x comp pic 99.
procedure division.
perform varying x from 1 by 1
until x > 5
move x to f-rec
write f-rec
end-perform
goback
.
end program pgm-1.
program-id. pgm-2.
environment division.
input-output section.
file-control.
select f assign "f.dat"
organization sequential
.
data division.
file section.
fd f external.
1 f-rec pic 99.
working-storage section.
1 pic x value "0".
88 eof value "1".
procedure division.
perform until eof
read f
end
set eof to true
not end
display f-rec
end-read
end-perform
goback
.
end program pgm-2.
输出:
01
02
03
04
05
这是一种替代方法,而不是对问题的直接回答。它是 Cobol 程序员可能会遇到并且应该知道的一种方法。 我添加以供参考。
另一种传递文件控制的方法是使用 File-Driver
或 File-Interface
模块来执行文件的 Reading/Writing。各个应用程序调用这个程序,如果一个文件在多个地方使用,这种方法最有效。
File-Driver
的优点包括
- 您可以使链接中的文件记录区域比文件记录大小大得多。 该文件可能有一个 50 字节的记录和 20 字节的填充符,您可以使 File-Record-Linkage 区域为 500 字节。这可能会减少将来的维护。
- 一般控制记录/页眉/页脚记录可以在
File-Driver
程序中写入/检查。应用程序不需要知道任何控制记录。在一个站点上,我需要向现有文件添加 Header/Footer 和文件验证。我所需要做的只是更改Code Generation parameters
、重新生成File-Driver
和一些基本测试。无需更改程序 File-Drivers
几乎相同。你可以- 在 Copybooks 中存储大量 Working Storage 和 Code 并使用 Copy replacing .
- 使用代码生成
- 标准复制修改
- 文件驱动程序可以独立于调用程序进行测试。这在您使用文件验证时很方便。