当前位置: 代码迷 >> 综合 >> C5-COBOL 基本动词
  详细解决方案

C5-COBOL 基本动词

热度:33   发布时间:2023-12-15 17:09:30.0

COBOL 基本动词

COBOL动词用于过程部中的数据处理。每个语句总是以COBOL动词开头。有几种具有不同动作类型的COBOL动词。

Input(输入)/Output(输出)动词

输入/输出动词用于从用户获取数据,并显示COBOL程序的输出。下面两个动词用于这一过程:

Accept动词

Accept 动词用于从操作系统或直接从用户获取诸如日期,时间和天等数据。如果程序从用户接收数据,那么就需要通过JCL传递。在从操作系统获取数据时,FROM选项则如下面例子所示:

ACCEPT WS-STUDENT-NAME.
ACCEPT WS-DATE FROM SYSTEM-DATE.

Display动词

Display动词用于显示COBOL程序的输出。

DISPLAY WS-STUDENT-NAME.
DISPLAY "System date is : " WS-DATE.

COBOL程序

       IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-STUDENT-NAME PIC X(25).01 WS-DATE PIC X(10).PROCEDURE DIVISION.ACCEPT WS-DATE FROM DATE.DISPLAY "Date : " WS-DATE.STOP RUN.

JCL执行上述COBOL程序:

//SAMPLE JOB(TESTJCL,XXXXXX),CLASS=A,MSGCLASS=C
//STEP1 EXEC PGM=HELLO
//INPUT DD DSN=PROGRAM.DIRECTORY,DISP=SHR
//SYSIN DD *
TutorialsPoint
/*

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

Name : TutorialsPoint
Date : 2014-08-30

Initialize(初始化)动词

Initialize 动词被用来初始化组项或基本项。数据名为RENAME的子句不能被初始化。数字数据项由ZEROES代替。字母数字或字母数据项由SPACES代替。如果我们包含REPLACING术语,则数据项可被初始化为给定替换值,如以下示例所示:

       IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NAME PIC A(30) VALUE 'ABCDEF'.01 WS-ID PIC 9(5).01 WS-ADDRESS. 05 WS-HOUSE-NUMBER PIC 9(3).05 WS-COUNTRY PIC X(15).05 WS-PINCODE PIC 9(6) VALUE 123456.PROCEDURE DIVISION.A000-FIRST-PARA.INITIALIZE WS-NAME, WS-ADDRESS.INITIALIZE WS-ID REPLACING NUMERIC DATA BY 12345.DISPLAY "My name is : "WS-NAME.DISPLAY "My ID is : "WS-ID.DISPLAY "Address : "WS-ADDRESS.DISPLAY "House Number : "WS-HOUSE-NUMBER.DISPLAY "Country : "WS-COUNTRY.DISPLAY "Pincode : "WS-PINCODE.STOP RUN.

JCL执行上述COBOL程序:

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

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

My name is   :                               
My ID is     : 12345
Address      : 000               000000
House Number : 000
Country      :                
Pincode      : 000000

Move(移动)动词

移动动词是用来将数据从源数据复制到目标数据的。它可以用于基本和组数据项。对于组数据项,使用MOVE CORRESPONDING/CORR。在尝试其它选项的时候,MOVE CORR不工作;但是在大型机服务器上工作。

对于从字符串移动数据,则使用MOVE(x:l),其中x是起始位置,l是长度。如果目标数据项PIC子句少于源数据项PIC子句,则数据将被截断。如果目标数据项PIC子句多于源数据项PIC子句,则将添加额外的ZEROS或SAPCES字节。从下面的例子可以清楚的看到:

       IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9).01 WS-NUM2 PIC 9(9).01 WS-NUM3 PIC 9(5).01 WS-NUM4 PIC 9(6).01 WS-ADDRESS. 05 WS-HOUSE-NUMBER PIC 9(3).05 WS-COUNTRY PIC X(5).05 WS-PINCODE PIC 9(6).01 WS-ADDRESS1. 05 WS-HOUSE-NUMBER1 PIC 9(3).05 WS-COUNTRY1 PIC X(5).05 WS-PINCODE1 PIC 9(6).PROCEDURE DIVISION.A000-FIRST-PARA.MOVE 123456789 TO WS-NUM1.MOVE WS-NUM1 TO WS-NUM2 WS-NUM3.MOVE WS-NUM1(3:6) TO WS-NUM4.MOVE 123 TO WS-HOUSE-NUMBER.MOVE 'INDIA' TO WS-COUNTRY.MOVE 112233 TO WS-PINCODE.MOVE WS-ADDRESS TO WS-ADDRESS1.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUM3 : " WS-NUM3.DISPLAY "WS-NUM4 : " WS-NUM4.DISPLAY "WS-ADDRESS : " WS-ADDRESS.DISPLAY "WS-ADDRESS1 : " WS-ADDRESS1.STOP RUN.

JCL执行上述COBOL程序。

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

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

WS-NUM1     : 123456789
WS-NUM2     : 123456789
WS-NUM3     : 56789
WS-NUM4     : 345678
WS-ADDRESS  : 123INDIA112233
WS-ADDRESS1 : 123INDIA112233

合法移动

下表给出了有关合法移动的信息:

字母 字母数字 数字
字母 可能 可能 不可能
字母数字 可能 可能 可能
数字 不可能 可能 可能

Add(加法)动词

加法动词用于两个或多个数字相加,并将结果存储在目标运算对象中。

语法

以下为两个或多个数字相加的语法:

ADD A B TO C DADD A B C TO D GIVING EADD CORR WS-GROUP1 TO WS-GROUP2

在语法句1中,A,B,C相加,结果存储在C(C=A+B+C)。A,B,D相加,结果存储在D(D=A+B+D)。

在语法句2中,A,B,C,D相加,结果存储在E(E=A+B+C+D)。

在语法句3中,WS-GROUP1和WS-GROUP2中的子组项相加,结果存储在WS-GROUP2中。

        IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9) VALUE 10 .01 WS-NUM2 PIC 9(9) VALUE 10.01 WS-NUM3 PIC 9(9) VALUE 10.01 WS-NUM4 PIC 9(9) VALUE 10.01 WS-NUMA PIC 9(9) VALUE 10.01 WS-NUMB PIC 9(9) VALUE 10.01 WS-NUMC PIC 9(9) VALUE 10.01 WS-NUMD PIC 9(9) VALUE 10.01 WS-NUME PIC 9(9) VALUE 10.PROCEDURE DIVISION.ADD WS-NUM1 WS-NUM2 TO WS-NUM3 WS-NUM4.ADD WS-NUMA WS-NUMB WS-NUMC TO WS-NUMD GIVING WS-NUME.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUM3 : " WS-NUM3.DISPLAY "WS-NUM4 : " WS-NUM4.DISPLAY "WS-NUMA : " WS-NUMA.DISPLAY "WS-NUMB : " WS-NUMB.DISPLAY "WS-NUMC : " WS-NUMC.DISPLAY "WS-NUMD : " WS-NUMD.DISPLAY "WS-NUME : " WS-NUME.STOP RUN.

JCL执行上述COBOL程序:

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

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

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000030
WS-NUM4     : 000000030
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000010
WS-NUME     : 000000040

Subtract(减法)动词

减法动词用于减法运算。

语法

下面给出的是减法运算的语法:

SUBTRACT A B FROM C DSUBTRACT A B C FROM D GIVING ESUBTRACT CORR WS-GROUP1 TO WS-GROUP2

在语法句1中,A和B相加并从C中减去,结果存储在C(C=C-(A+B))。A和B相加并从D中减去,结果存储在D(D=D-(A+B))。

在语法句2中,A,B,C相加并从D中减去,结果存储在E(E=D-(A+B+C))。

在语法句3中,WS-GROUP1和WS-GROUP2中的子组项相减,结果存储在WS-GROUP2中。

        IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9) VALUE 10 .01 WS-NUM2 PIC 9(9) VALUE 10.01 WS-NUM3 PIC 9(9) VALUE 100.01 WS-NUM4 PIC 9(9) VALUE 100.01 WS-NUMA PIC 9(9) VALUE 10.01 WS-NUMB PIC 9(9) VALUE 10.01 WS-NUMC PIC 9(9) VALUE 10.01 WS-NUMD PIC 9(9) VALUE 100.01 WS-NUME PIC 9(9) VALUE 10.PROCEDURE DIVISION.SUBTRACT WS-NUM1 WS-NUM2 FROM WS-NUM3 WS-NUM4.SUBTRACT WS-NUMA WS-NUMB WS-NUMC FROM WS-NUMD GIVING WS-NUME.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUM3 : " WS-NUM3.DISPLAY "WS-NUM4 : " WS-NUM4.DISPLAY "WS-NUMA : " WS-NUMA.DISPLAY "WS-NUMB : " WS-NUMB.DISPLAY "WS-NUMC : " WS-NUMC.DISPLAY "WS-NUMD : " WS-NUMD.DISPLAY "WS-NUME : " WS-NUME.STOP RUN.

JCL执行上述COBOL程序:

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

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

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000080
WS-NUM4     : 000000080
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000010
WS-NUMD     : 000000100
WS-NUME     : 000000070

Multiply(乘法)动词

乘法动词用于乘法运算。

语法

下面是两个或多个数字相乘的语法:

MULTIPLY A BY B CMULTIPLY A BY B GIVING E

在语法句1中,A和B相乘,结果存储在B(B=AB)。A和C相乘,结果存储在C(C=AC)。

在语法句2中,A和B相乘,结果存储在E(E=A*B)。

        IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9) VALUE 10 .01 WS-NUM2 PIC 9(9) VALUE 10.01 WS-NUM3 PIC 9(9) VALUE 10.01 WS-NUMA PIC 9(9) VALUE 10.01 WS-NUMB PIC 9(9) VALUE 10.01 WS-NUMC PIC 9(9) VALUE 10.PROCEDURE DIVISION.MULTIPLY WS-NUM1 BY WS-NUM2 WS-NUM3.MULTIPLY WS-NUMA BY WS-NUMB GIVING WS-NUMC.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUM3 : " WS-NUM3.DISPLAY "WS-NUMA : " WS-NUMA.DISPLAY "WS-NUMB : " WS-NUMB.DISPLAY "WS-NUMC : " WS-NUMC.STOP RUN.

JCL执行上述COBOL程序:

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

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

WS-NUM1     : 000000010
WS-NUM2     : 000000100
WS-NUM3     : 000000100
WS-NUMA     : 000000010
WS-NUMB     : 000000010
WS-NUMC     : 000000100

Divide(除法)动词

除法动词用于除法运算。

语法

下面是除法运算的语法:

DIVIDE A INTO BDIVIDE A BY B GIVING C REMAINDER R

在语法句1中,B除以A,结果存储在B(B=B/A)。

在语法句2中,A除以B,结果存储在C(C=A/B),余数存储在R。

        IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9) VALUE 5.01 WS-NUM2 PIC 9(9) VALUE 250.01 WS-NUMA PIC 9(9) VALUE 100.01 WS-NUMB PIC 9(9) VALUE 15.01 WS-NUMC PIC 9(9).01 WS-REM PIC 9(9). PROCEDURE DIVISION.DIVIDE WS-NUM1 INTO WS-NUM2.DIVIDE WS-NUMA BY WS-NUMB GIVING WS-NUMC REMAINDER WS-REM.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUMA : " WS-NUMA.DISPLAY "WS-NUMB : " WS-NUMB.DISPLAY "WS-NUMC : " WS-NUMC.DISPLAY "WS-REM : " WS-REM.STOP RUN.

JCL执行上述COBOL程序:

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

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

WS-NUM1     : 000000005
WS-NUM2     : 000000050
WS-NUMA     : 000000100
WS-NUMB     : 000000015
WS-NUMC     : 000000006
WS-REM      : 000000010

Compute(计算)语句

计算语句用于在COBOL中写入算术表达式。这是替代加,减,乘和除法。

       IDENTIFICATION DIVISION.PROGRAM-ID. HELLO.DATA DIVISION.WORKING-STORAGE SECTION.01 WS-NUM1 PIC 9(9) VALUE 10.01 WS-NUM2 PIC 9(9) VALUE 10.01 WS-NUM3 PIC 9(9) VALUE 10.01 WS-NUMA PIC 9(9) VALUE 50.01 WS-NUMB PIC 9(9) VALUE 10.01 WS-NUMC PIC 9(9).PROCEDURE DIVISION.COMPUTE WS-NUMC=(WS-NUM1 * WS-NUM2) - (WS-NUMA / WS-NUMB) + WS-NUM3.DISPLAY "WS-NUM1 : " WS-NUM1.DISPLAY "WS-NUM2 : " WS-NUM2.DISPLAY "WS-NUM3 : " WS-NUM3.DISPLAY "WS-NUMA : " WS-NUMA.DISPLAY "WS-NUMB : " WS-NUMB.DISPLAY "WS-NUMC : " WS-NUMC.STOP RUN.

JCL执行上述COBOL程序。

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

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

WS-NUM1     : 000000010
WS-NUM2     : 000000010
WS-NUM3     : 000000010
WS-NUMA     : 000000050
WS-NUMB     : 000000010
WS-NUMC     : 000000105