learnxinyminutes-docs/zh-cn/cobol.md

185 lines
7.1 KiB
Markdown
Raw Permalink Normal View History

---
filename: learn-cn.COB
contributors:
- ["Hyphz", "http://github.com/hyphz/"]
translators:
- ["GOLGO11", "https://github.com/GOLGO11/"]
---
COBOL是一门面向商业的语言它从1960年最初设计以来被修订过数次。它被宣称仍然有超过80%的机构在使用它。
```cobol
*COBOL. 最好是按照它1985年的标准来编程。
*用附带GnuCOBOL编译器的OpenCobolIDE 4.7.6来编译。
*COBOL在老版COBOL-85和新版COBOL-2002以及COBOL-2014之间有明显的差别。
*老版COBOL要求编码的前一到六列是空着的它们被用来存储穿孔卡片的序列号...
*第七列的一个“*”符号表示注释的开始。
*在老版COBOL中一条以*开头的注释最长只能占一行,
*新版COBOL不需要额外的列来补序列号并且用“*>" 来注释,允许在行中开始注释
*老版COBOL也强加了对最大行长度的限制
*关键字在老版COBOL中必须大写
*但在新版COBOL中不区分大小写
*虽然新版COBOL允许你编写大小写混合的代码
*但是在大多数情况下编写COBOL代码时全用大写字符
*大多数专业的COBOL开发者都是这么做的。
*COBOL语句以句点结尾。
*COBOL代码被拆成了四个部。
*各部按顺序,它们是:
*IDENTIFICATION DIVSION.(标识部)
*ENVIRONMENT DIVISION.(环境部)
*DATA DIVISION.(数据部)
*PROCEDURE DIVISION.(过程部)
*第一步我们必须给我们的程序一个ID。
*Identification division 也能包含其他的值,
*但它们都只是程序的元数据。Program-id是唯一一个必须给出的值。
IDENTIFICATION DIVISION.
PROGRAM-ID. LEARN.
AUTHOR. JOHN DOE.
DATE-WRITTEN. 05/02/2020.
*让我们来声明一些变量。
*我们要在DATA DIVISION的WORKING-STORAGE节来完成这个事情。
*每个数据项(又名变量)从一个级别编号开始。
*然后是数据项的名字后边再跟着一个picture关键字
*来描述这个变量将要包含的数据的类型。
*几乎所有的COBOL开发者都会把PICTURE简写为PIC。
*A代表字母X代表字母和数字9代表数字。
*举例:
01 MYNAME PIC xxxxxxxxxx. *> 十个字符的字符串。
*但是逐个数那些x会导致错误
*所以以上代码可以,并且应该
*这样重写:
01 MYNAME PIC X(10).
*这是几个更多的例子:
01 AGE PIC 9(3). *> 数字最多三位
01 LAST_NAME PIC X(10). *> 字符串最多十个字符
*在COBOL里一行中多个空格和一个空格的效果是一样的 所以通常
*情况下都用多个空格排列代码来便于
*其他的开发者阅读。
01 inyear picture s9(7). *> S 使数字为正数.
*> 括号里意思是重复7次9
*> 即六位数字(不是数组)
*现在让我们来写一点儿代码。这是一个简单的Hello World程序。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 THE-MESSAGE PIC X(20).
PROCEDURE DIVSION.
DISPLAY "STARTING PROGRAM".
MOVE "HELLO WORLD" TO THE-MESSAGE.
DISPLAY THE-MESSAGE.
STOP RUN.
*以上的代码会输出:
*STARTING PROGRAM
*HELLO WORLD
********用COBOL可以做数学运算***************
ADD 1 TO AGE GIVING NEW-AGE.
SUBTRACT 1 FROM COUNT.
DIVIDE VAR-1 INTO VAR-2 GIVING VAR-3.
COMPUTE TOTAL-COUNT = COUNT1 PLUS COUNT2.
*********PERFORM********************
*PERFORM关键字允许你跳到代码中其他特殊的代码段
*当这段特殊的代码被执行完后继续回来执行下面的可执行语句。
*你必须把PERFORM这个词写完整不可以缩写它。
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOCOBOL.
PROCEDURE DIVISION.
FIRST-PARA.
DISPLAY 'THIS IS IN FIRST-PARA'.
PERFORM THIRD-PARA THRU FOURTH-PARA. *>跳过second-para执行3rd&4th
*> 之后当third和fourth执行完
*> 回到这里继续往下执行直到遇到STOP RUN.
SECOND-PARA.
DISPLAY 'THIS IS IN SECOND-PARA'.
STOP RUN.
THIRD-PARA.
DISPLAY 'THIS IS IN THIRD-PARA'.
FOURTH-PARA.
DISPLAY 'THIS IS IN FOURTH-PARA'.
*当你编译执行以上程序时,它会生成以下结果:
THIS IS IN FIRST-PARA
THIS IS IN THIRD-PARA
THIS IS IN FOURTH-PARA
THIS IS IN SECOND-PARA
**********用STRING关键字把变量组合到一起************
*现在是时候学习两个类似的COBOL动词了string和unstring。.
*string动词经常被用来连接两个或多个字符串把它们拼在一起
*没什么特别的Unstring被用来把一个字符串拆分成两个或多个更小的字符串。
*当你在程序中使用string或unstring时不要忘记使用”delimited by“这个很重要。
IDENTIFICATION DIVISION.
PROGRAM-ID. LEARNING.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 FULL-NAME PIC X(20).
01 FIRST-NAME PIC X(13) VALUE "BOB GIBBERISH".
01 LAST-NAME PIC X(5) VALUE "COBB".
PROCEDURE DIVISION.
STRING FIRST-NAME DELIMITED BY SPACE
" "
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME
END-STRING.
DISPLAY "THE FULL NAME IS: "FULL-NAME.
STOP RUN.
*以上代码将会输出:
THE FULL NAME IS: BOB COBB
*让我们来看看为什么是这样。
*首先我们在DATA DIVISION声明了所有的变量
*包括我们想存储string命令生成的新字符串用到的的变量。
*这个操作过程在PROCEDURE DIVISION完成。
*我们从STRING 关键字开始到END-STRING结束。
*在它们之间我们列出我们想要组合变量形成更大的主变量的过程。
*这里我们组合了FIRST-NAME, 一个空格和LAST-NAME。
*跟在FIRST-NAME和LAST-NAME后面的DELIMITED BY短语告诉程序我们想要在各自变量上截取字符的规则。
*DELIMITED BY SPACE告诉程序从最开始截取字符直到遇到一个空格。
*DELIMITED BY SIZE告诉程序截取字符的完整长度。
*我们在FIRST-NAME后面使用DELIMITED BY SPACE字符串中的GIBBERISH部分就被忽略了。
*为了更清楚改变代码中的第10行如下:
STRING FIRST-NAME DELIMITED BY SIZE
*然后重新执行程序. 这次的输出变成:
THE FULL NAME IS: BOB GIBBERISH COBB
```
## 想了解更多吗?
* [GnuCOBOL](https://sourceforge.net/projects/open-cobol/)