COBOL 程序结构

news2024/12/29 8:39:37

COBOL 程序结构

COBOL程序结构由部(division)组成,如下图所示:

程序结构

这些部简介如下:

  • **Sections(节)**是程序逻辑的逻辑细分。节是段落的集合。
  • **Paragraphs(段)**是一个节或部的细分。它可以是用户定义或预定义的名称,后面跟一个句点,由零个或多个句子/条目组成。
  • **Sentences(句子)**是一个或多个声明的组合。句子只出现在过程部(Procedure division)。一个句子必须以句点结束。
  • **Statements(语句)**是有意义的COBOL语句,执行一些进程。
  • **Characters(字符)**是在层级中最低的,不可分割。

你可以通过以下示例将上述术语与COBOL程序联系起来:

PROCEDURE DIVISION.
A0000-FIRST-PARA SECTION.
FIRST-PARAGRAPH.
ACCEPT WS-ID            - Statement-1  -----|
MOVE '10' TO WS-ID      - Statement-2       |-- Sentence - 1
DISPLAY WS-ID           - Statement-3  -----|

部(Division)

COBOL程序包括四个部。

标识部(Identification Division)

这是每一个COBOL程序的第一个也是唯一强制要求的部。程序员和编译器使用这个部来识别该程序。在这个部中,PROGRAM-ID是唯一强制要求的段落。PROGRAM-ID指定的程序名可包含1至30个字符。

试试下面的例子。

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
PROCEDURE DIVISION.
DISPLAY 'Welcome to Tutorialspoint'.
STOP RUN.

下面是JCL执行上面的COBOL程序。

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

当你编译和执行上面的程序时,会产生以下结果:

Welcome to Tutorialspoint

环境部(Environment Division)

环境部用于指定程序的输入和输出文件。它由两个节组成:

  • **配置节(Configuration section)**可提供有关编写和执行程序的系统信息。它由两个段组成:

    源计算机(source computer):用于编译程序的系统。

    对象计算机(object computer):用于执行程序的系统。

  • **输入输出节(Input-Output section)**提供有关程序中要使用的文件的信息。它由两个段组成:

    文件控制(file control):提供在程序中使用的外部数据集的信息。

    IO控制(I-O control):提供在程序中使用的文件的信息。

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
   SOURCE-COMPUTER. XXX-ZOS.
   OBJECT-COMPUTER. XXX-ZOS.

INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO DDNAME
   ORGANIZATION IS SEQUENTIAL.

数据部(Data Division)

数据部用于定义程序中使用的变量。它由四个节组成:

  • **文件节(File section)**用于定义文件的记录结构。
  • **工作存储节(Working-Storage section)**用于声明程序中使用的临时变量和文件结构。
  • **本地存储节(Local-Storage section)**是类似于工作存储节。唯一的区别是每次程序开始执行时都会分配和初始化变量。
  • **连接节(Linkage section)**用于描述从外部程序接收到的数据名称。

COBOL程序

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

ENVIRONMENT DIVISION.

   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
   SELECT FILEN ASSIGN TO INPUT.
          ORGANIZATION IS SEQUENTIAL.
          ACCESS IS SEQUENTIAL.
          
DATA DIVISION.
   FILE SECTION.
   FD FILEN
   01 NAME PIC A(25).
   
   WORKING-STORAGE SECTION.
   01 WS-STUDENT PIC A(30).
   01 WS-ID PIC 9(5).

   LOCAL-STORAGE SECTION.
   01 LS-CLASS PIC 9(3).
   
   LINKAGE SECTION.
   01 LS-ID PIC 9(5).
   
PROCEDURE DIVISION.
   DISPLAY 'Executing COBOL program using JCL'.
STOP RUN.

JCL执行上述COBOL程序如下:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO
//INPUT DD DSN=ABC.EFG.XYZ,DISP=SHR

当你编译和执行上述程序时,会产生以下结果:

Executing COBOL program using JCL

过程部(Procedure Division)

过程部用于包含该程序的逻辑。它由使用数据部定义的变量的可执行语句组成。在这个部中,段和节的名称是用户定义的。

在过程部中必须至少有一个语句。结束这个部的执行的最后一条语句是在调用程序中使用的STOP RUN或者是在被调用程序中使用的EXIT PROGRAM

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.

DATA DIVISION.
   WORKING-STORAGE SECTION.
   01 WS-NAME PIC A(30).
   01 WS-ID PIC 9(5) VALUE '12345'.

PROCEDURE DIVISION.
   A000-FIRST-PARA.
   DISPLAY 'Hello World'.
   MOVE 'TutorialsPoint' TO WS-NAME.
   DISPLAY "My name is : "WS-NAME.
   DISPLAY "My ID is : "WS-ID.
STOP RUN.

JCL执行上述COBOL程序:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

当你编译和执行上面的程序时,会产生以下结果:

Hello World
My name is : TutorialsPoint
My ID is : 12345


```cobol
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO

当你编译和执行上面的程序时,会产生以下结果:

Hello World
My name is : TutorialsPoint
My ID is : 12345

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路面积水监测-路面积水监测系统

在城市化进程不断加快的背景下,城市道路面临着日益严重的积水问题。持续的降雨和不良的排水系统导致路面积水,给交通运输和城市生活带来了诸多不便和安全隐患。路面积水监测系统旨在易涝点布设内涝积水监测仪,实时了解路面积水情况&#xff0…

矿井水除氟,污水除氟的工艺分析

高矿化度的废水是指含有高浓度溶解性矿物质的废水,通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征,对环境…

【Nginx】缓存集成

文章目录 缓存的概念Nginx的web缓存服务Nginx缓存设置的相关指令Nginx缓存设置案例Nginx缓存的清除方式一:删除对应的缓存目录方式二:使用第三方扩展模块 Nginx设置资源不缓存 缓存的概念 缓存就是数据交换的缓冲区(称作:Cache),当用户要获取数据的时候,会先从缓存…

DOUBLETROUBLE 1

文章目录 DOUBLETROUBLE: 1实战演练一、前期准备1、相关信息 二、信息收集1、nmap探测目标靶机端口2、扫描目标网址目录3、访问网站,发现secret下有个图片4、将图片下载5、查看图片所含内容6、破解密码并查看7、登陆邮箱8、创建反弹shell9、上传反弹shell10、监听11…

【云计算架构】通过新的优化视角查看云架构

仅仅让云部署工作不再是目标。关注构建和部署最佳解决方案的新指标和方法。 随着云计算架构的成熟,我们定义成功的方式也应该成熟。在2021,我指出,优化云计算更多的是二进制过程,而不是模拟过程。 我当时所说的仍然是正确的&#…

【医学图像】图像分割系列.1

医学图像分割是一个比较有应用意义的方向,本文简单介绍三篇关于医学图像分割的论文: UNeXt(MICCAI2022),PHTrans(MICCAI2022),DA-Net(MICCAI2022)。 目录 …

目标追踪---deepsort原理讲解

目录 一、多目标追踪的主要步骤 二、sort流程 三、Deepsort算法流程 一、多目标追踪的主要步骤 获取原始视频帧利用目标检测器对视频帧中的目标进行检测将检测到的目标的框中的特征提取出来,该特征包括表观特征(方便特征对比避免ID switch&#xff0…

SQL语句练习附带答案

首先创建数据库filmclub DROP DATABASE IF EXISTS filmclub;CREATE DATABASE filmclub;USE filmclub;CREATE TABLE category (cid INT PRIMARY KEY AUTO_INCREMENT,cname VARCHAR(20) )CHARSETutf8; CREATE TABLE film (fid INT PRIMARY KEY AUTO_INCREMENT,fname VARCHAR(20)…

ChatGPT和 dalle2 配合生成故事绘本

和 dalle2 配合生成故事绘本 在之前章节中,我们已经尝试过让 ChatGPT 来生成一些故事情节,不管是影视剧还是小说还是游戏都可以。这时候,自然而然的可以联想到:那我们可不可以一步到位,把 ChatGPT 编出来的故事情节&a…

为什么MySQL数据库单表建议最大2KW数据?

文章目录 为什么MySQL数据库单表建议最大2KW数据?一、 Innodb 存储引擎1、数据存储2、数据页的结构 二、 B tree 结构三、 B 树存放数据的行数 为什么MySQL数据库单表建议最大2KW数据? 我们经常会听到一种说法,在MySQL中,数据库单…

Spring Security 中的 CSRF 攻击是什么?如何防止它?

Spring Security 中的 CSRF 攻击是什么?如何防止它? 什么是 CSRF 攻击? CSRF(Cross-Site Request Forgery)攻击是一种常见的网络安全威胁,也称为“跨站请求伪造”攻击。攻击者可以通过某些手段&#xff0…

SpringBoot整合RabbitMQ及其原理分析

上一篇&#xff1a;RabbitMQ基础知识 1、相关依赖 这里无需指定版本号&#xff0c;让其跟着SpringBoot版本走。本示例使用SpringBoot版本号为2.7.10。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-…

SaaS系统平台,如何兼顾客户的个性化需求?

在当今数字化的商业环境中&#xff0c;SaaS系统已经成为企业运营的重要组成部分之一。 SaaS系统平台的好处是显而易见的&#xff0c;可以将业务流程数字化&#xff0c;从而帮助企业提高效率并节省成本。 但是&#xff0c;由于每个企业的业务都不尽相同&#xff0c;所以在选择Sa…

GuLi商城-前端基础ES6

ES6 ES6全称ECMAScript6.0是JavaScript语言的下一代标准。 ECMAScript是浏览器脚本语言的规范&#xff0c;而我们熟悉的各种js语言&#xff0c;如JavaScript则是规范的具体实 现。 新建一个ES6文件夹&#xff0c;shift!按着不动&#xff0c;回车&#xff0c;可以快速生成模…

图神经网络:(处理点云)PPFNet的实现

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 前言文献阅读代码实操历史遗留问题 前言 本篇文章接上一篇文章…

【LeetCode: 410. 分割数组的最大值 | 暴力递归=>记忆化搜索=>动态规划 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

这七种常见的路由协议,每一个网络工程师都应该知道!

你好&#xff0c;这里是网络技术联盟站。 路由协议是网络中非常重要的一个概念&#xff0c;它负责将数据包从源节点传递到目的节点。路由协议定义了网络中不同路由器之间的通信规则和数据传输方式&#xff0c;以便有效地将数据包从源地址传输到目标地址。在网络领域中&#xf…

基于无人机辅助边缘计算系统的节能卸载策略

源自&#xff1a;《系统工程与电子技术》 作者&#xff1a;余雪勇 朱烨 邱礼翔 朱洪波 摘 要 针对复杂地形中地面基础设施无法有效提供可靠通信和密集算力的问题,首先提出一种基于无人机(unmanned aerial vehicle, UAV)托管计算资源的卸载方案。考虑用户终端的计算需…

提升网站访问性的10个步骤优化

第一步,检查 不允许空,不允许过长,简洁明了。 是第一个可以访问到内容的元素,所以一定要非常重视。当用户切换浏览器Tab标签的时候,一定最先听到 标记的内容。Title一定要能代表当前页面的主题。这里的要求和SEO最佳实践几乎一致。 第二步,提供文字替代方案。 走查网页…

【LeetCode】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积&#xff08;中等&#xff09; 方法一&#xff1a;左右乘积列表 思路 除了 nums[i] 以外各元素的积&#xff0c;就等同于 nums[i] 左边元素的乘积 * 右边元素的乘积&#xff0c;因此&#xff0c;我们可以计算出两个乘积列表 &#xff0c;最后再经过一…