COBOL - 基本动词

  • 简述

    COBOL 动词用于数据处理的过程划分。语句总是以 COBOL 动词开头。有几个 COBOL 动词具有不同类型的动作。
  • 输入/输出动词

    输入/输出动词用于从用户那里获取数据并显示 COBOL 程序的输出。以下两个动词用于此过程 -

    接受动词

    接受动词用于从操作系统或直接从用户获取日期、时间和日期等数据。如果一个程序正在接受来自用户的数据,那么它需要通过 JCL 传递。从操作系统获取数据时,包含 FROM 选项,如下例所示 -
    
    ACCEPT WS-STUDENT-NAME.
    ACCEPT WS-DATE FROM SYSTEM-DATE.
    

    显示动词

    显示动词用于显示 COBOL 程序的输出。
    
    DISPLAY WS-STUDENT-NAME.
    DISPLAY "System date is : " WS-DATE.
    
    COBOL PROGRAM
    
    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-STUDENT-NAME.
       ACCEPT WS-DATE FROM DATE.
       DISPLAY "Name :  " WS-STUDENT-NAME.
       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 : 200623
    
  • 初始化动词

    初始化动词用于初始化组项或基本项。无法初始化带有 RENAME 子句的数据名称。数字数据项被零替换。字母数字或字母数据项由空格替换。如果我们包含 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 CORRESPONDING/CORR。在 try it 选项中,MOVE CORR 不起作用;但在大型机服务器上,它会工作。
    对于从字符串中移动数据,使用 MOVE(x:l),其中 x 是起始位置,l 是长度。如果目标数据项 PIC 子句小于源数据项 PIC 子句,则数据将被截断。如果目标数据项 PIC 子句多于源数据项 PIC 子句,则将在额外字节中添加零或空格。下面的例子说明了这一点。
    
    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 A B TO C D
    ADD A B C TO D GIVING E
    ADD CORR WS-GROUP1 TO WS-GROUP2
    
    在 syntax-1 中,A、B、C 相加,结果存储在 C 中(C=A+B+C)。A、B、D 相加,结果存储在 D 中(D = A + B + D)。
    在 syntax-2 中,A、B、C、D 相加,结果存储在 E 中(E=A+B+C+D)。
    在语法 3 中,添加了 WS-GROUP1 和 WS-GROUP2 中的子组项,并将结果存储在 WS-GROUP2 中。
    Example
    
    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 A B FROM C D
    SUBTRACT A B C FROM D GIVING E
    SUBTRACT CORR WS-GROUP1 TO WS-GROUP2
    
    在语法 1 中,从 C 中加减 A 和 B。结果存储在 C 中 (C = C-(A+B))。从 D 中加减 A 和 B。结果存储在 D 中 (D = D-(A+B))。
    在 syntax-2 中,从 D 中加减 A、B、C。结果存储在 E 中(E = D-(A+B+C))
    在语法 3 中,减去 WS-GROUP1 和 WS-GROUP2 中的子组项,并将结果存储在 WS-GROUP2 中。
    Example
    
    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 A BY B C
    MULTIPLY A BY B GIVING E
    
    在 syntax-1 中,A 和 B 相乘,结果存储在 B 中(B=A*B)。A 和 C 相乘,结果存储在 C 中 (C = A * C)。
    在语法 2 中,A 和 B 相乘,结果存储在 E (E=A*B) 中。
    Example
    
    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 A INTO B
    DIVIDE A BY B GIVING C REMAINDER R
    
    在 syntax-1 中,B 除以 A,结果存储在 B 中(B=B/A)。
    在语法 2 中,A 除以 B,结果存储在 C (C=A/B) 中,余数存储在 R 中。
    Example
    
    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 中编写算术表达式。这是加、减、乘和除的替代品。
    Example
    
    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