【发布时间】:2021-06-09 18:48:58
【问题描述】:
我可以将主 COBOL 代码中的文件控制 FD 条目传递到过程中吗?
如果是,从 COBOL 主程序调用过程时我需要传递什么?
【问题讨论】:
我可以将主 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 模块来读取/写入文件。单独的应用程序调用这个程序,如果一个文件在多个地方使用,这种方法效果最好。
File-Driver 的优点包括
File-Driver 程序中写入/检查控制记录/页眉/页脚记录。应用程序不需要知道任何控制记录。在一个站点,我需要将页眉/页脚和文件验证添加到现有文件。我只需要更改Code Generation parameters,重新生成File-Driver 和一些基本测试。无需更改程序File-Drivers 几乎相同。你可以
【讨论】: