首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PC COBOL程序到JCL

PC COBOL程序到JCL
EN

Stack Overflow用户
提问于 2021-12-07 17:15:56
回答 2查看 177关注 0票数 -1

我有以下简单的COBOL程序-为PC编写。它只需从计算机中读取一个文件并写入该文件:

代码语言:javascript
复制
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO
"C:Customers.dat"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 FIRST-NAME PIC X(20).
05 LAST-NAME PIC X(20).
WORKING-STORAGE SECTION.
01 WS-CUSTOMER-RECORD.
05 WS-FIRST-NAME PIC X(20).
05 WS-LAST-NAME PIC X(20).
01 WS-EOF PIC X.
PROCEDURE DIVISION.
OPEN OUTPUT CUSTOMER-FILE
PERFORM UNTIL CUSTOMER-RECORD = SPACES
DISPLAY "Enter the first and last name for the customer"
ACCEPT CUSTOMER-RECORD
WRITE CUSTOMER-RECORD
END-PERFORM
CLOSE CUSTOMER-FILE
DISPLAY "Output from the Customer File:"
OPEN INPUT CUSTOMER-FILE.
PERFORM UNTIL WS-EOF = 'Y'
READ CUSTOMER-FILE INTO WS-CUSTOMER-RECORD
AT END MOVE 'Y' TO WS-EOF
NOT AT END DISPLAY WS-CUSTOMER-RECORD
END-READ
END-PERFORM.
CLOSE CUSTOMER-FILE.
GOBACK.

我的问题是:我对JCL不太熟悉。所以如果我把这个程序放到一个大型机上,我会为JCL做些什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-07 17:57:10

我猜你的身份识别部在一次剪切粘贴事件中迷路了,你会需要的。

的当前版本不允许自由格式源代码,因此为了使代码能够编译,您必须重新格式化并遵循传统的固定格式。

赋值子句必须引用对应于JCL中DD名称的名称(限制为8个字符),而不是按名称引用数据文件。选择有意义的东西,尽可能用8个字符,也许是客户。

由于您是使用JCL运行的,所以您的接受陈述的工作方式会有所不同。数据可能来自SYSIN DD。

你的JCL会看起来像这样..。

代码语言:javascript
复制
[job card, which is shop-specific]
//TOMSPGM  EXEC PGM=yourProgramName
//STEPLIB  DD  DISP=SHR,DSN=mainframe.dataset.where.you.bound.your.program
//SYSIN    DD  *
[your customer records]
//CUSTOMER DD  DISP=(NEW,CATLG,DELETE),
//             DSN=mainframe.dataset.where.your.data.should.end.up,
//             LRECL=40,
//             AVGREC=U,
//             RECFM=FB,
//             SPACE=(40,(10,10),RLSE) Adjust to your needs
//SYSOUT       SYSOUT=*
//CEEDUMP      SYSOUT=*

我不确定这将如何与您创建客户文件,然后在同一个程序中读取它。在30年的大型机工作中,我从未见过这样的情况。

票数 3
EN

Stack Overflow用户

发布于 2021-12-09 10:59:53

添加来自@cschneid的答案。

很高兴看到DD语句上使用了AVGREC来为数据集分配空间。这比使用老式的CYLTRK单元要好得多.不幸的是,IMHO,IBM /OS架构师错过了实现更现代的空间: KiB,或MiB。(ISPF支持KB,MB作为空间单元,JCL不支持。)

使用AVGREC时,您可以告诉系统,SPACE=主空间和次要空间值是记录的数量,而不是物理单位,如磁道或圆柱。

代码语言:javascript
复制
//CUSTOMER DD  ...
//             AVGREC=U,
//             SPACE=(40,(10,20),RLSE) 

上面的语句告诉系统,编写的记录平均长度为40个字节(完全独立于RECFM=,或LRECL=!)。对于AVGREC=U (U means units),这进一步告诉系统为10条记录分配初始(主)空间,并在每次需要更多空间(有上限)时为20条记录添加额外的空间。

实物分配仍在轨道上,或引擎盖下的钢瓶中。系统计算所需的轨迹或钢瓶。

代码语言:javascript
复制
"average record length" * "number of records" * avgrec-unit

对于主分配,这是

代码语言:javascript
复制
40 * 10 * 1 = 400 bytes

好的。但是如何使用这些关键字在KiB或MiB中指定我们的空间需求呢?

请记住,SPACE=参数中的平均记录长度与通过LRECL=指定的实际记录长度完全无关。很好,所以我们可以自由选择平均记录长度,并将其设置为,例如1。还让我们将上面论坛中的“记录数量*”改为“单位数量”。公式如下:

代码语言:javascript
复制
1 * "number of units" * avgrec-unit

代码语言:javascript
复制
"number of units" * avgrec-unit

AVGREC=支持单元U (1)、K (1024)和M (1024*1024)。因此,为了分配以兆字节(MiB)为单位的空间,我们只需编写以下代码:

代码语言:javascript
复制
//CUSTOMER DD  ...
//             AVGREC=M,
//             SPACE=(1,(10,20),RLSE) 

这将分配10个MiB主空间和20个MiB次要空间。根据物理磁盘结构,每个分配被舍入到下一个磁道或圆柱的整数数。你就不用再关心了。很干净,不是吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70264318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档