COBOL – 数据类型
数据类型是程序员的分类,用于告诉编译器/解释器如何在程序中使用数据。例如,定义为数字的学生的卷号只有在提供其他值而不是数字时才会将输入作为数字,它将在程序内部引发异常终止。 DescriptionSymbol Short Description Value example 9 Numeric Include Digits 0 to 9 Phone_number: 9898989898 A Alphabetic Include only Letter A to A/a-z Name: GeekForGeeks X Alphanumeric Include both digits and letters Gift_voucher: ABZ445 S Signed Include integers value Balance: -458 P Assumed Decimal Used to find value on the left or right side of the decimal Assumed_dec:
示例程序:我们将使用该程序来解释本文的概念。
Cobol
IDENTIFICATION DIVISION.
PROGRAM-ID. YOUR-PROGRAM-NAME.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 GROUP01.
02 PHONE_NUMBER PIC 9(10) VALUE 7845955477.
02 ST_NAME PIC A(20) VALUE 'GeekForGeeks'.
01 GIFTVOUCHER PIC X(6) VALUE 'ABZ445'.
01 BALANCE PIC S9(3) VALUE -458.
01 ASSUMED_DEC PIC P9(2) VALUE 23.458.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY GROUP01
DISPLAY GIFTVOUCHER
DISPLAY BALANCE
DISPLAY ASSUMED_DEC
STOP RUN.
说明:要理解数据类型的概念,我们需要了解使用的基本术语。
- 数据名称
- 层数
- 图片条款
- 价值条款
1.数据名称
数据名称就像程序中使用的用户定义变量,将用于在其中保存不同的值,并且必须仅包含数字(0-9)、字母(AZ)、减号和连字符(-),a数据名称不能使用 MOVE、COMPUTE 等保留字。
Some Valid data names:
PHONE_NUMBER
ST_NAME
WS-POS1
BOOK
Invalid data names:
MOVE : it is reserved keyword
COMPUTE : it is reserved keyword
$VAR : $ char not allowed
100 : only number not allowed
2. 层数
级别编号是介于 01 和 49 之间的一位或两位整数,或三个特殊级别编号之一:66、77 或 88。以下级别编号用于构造记录:
- 组项:组项由一个或多个基本项组成,在下面的示例中 GROUP01 是一个组项。
- 基本项目:它是一个单独定义的项目,在上面的例子中 PHONE_NUMBER 是一个基本项目。
Level Number | Description | Type |
---|---|---|
01 | Record Description or Title for Group | General Level Number |
02 to 49 | For Group/Elementary items | |
66 | Rename Clause Items | Special Level Number |
77 | Fixed cannot be subdivided to declare an elementary item | |
88 | Condition name entry (mainly used for flag purposes) |
例子:
DATA DIVISION.
WORKING-STORAGE SECTION.
01 GROUP01. /*GROUP ELEMENT*/
02 PHONE_NUMBER PIC 9(10) VALUE 7845955477. /*ELEMENTARY ELEMENT*/
02 ST_NAME PIC A(20) VALUE 'GeekForGeeks'. /*ELEMENTARY ELEMENT*/
02 GIFTVOUCHER PIC X(6) VALUE 'ABZ445'.
02 BALANCE PIC S9(3) VALUE 458.
66 WS-VAR2 RENAMES PHONE_NUMBER THROUGH ST_NAMES /*RENAME ELEMENT*/
77 ASSUMED_DEC PIC P9(2) VALUE 23.458. /*INDEPENDENT ELEMENT*/
01 WS-GENDER PIC X(01). /*CONDITIONAL ELEMENT*/
88 WS-MALE VALUE "M".
88 WS-FEMALE VALUE "F".
3. 图片条款
在上面的代码中,不同的数据类型变量,如 PHONE_NUMBER、ST_NAME、GIFT VOUCHER 是在 Picture 子句(也称为 PIC)的帮助下定义的,有 5 个符号(9、A、X、S、P)可以在帮助下使用已经解释过的图片子句。
例子:
02 PHONE_NUMBER PIC 9(10) VALUE 7845955477. /*the PHONE_NUMBER is initialised as a numberic value with the help of picture clause using symbol 9 which can hold 10 digits*/
02 ST_NAME PIC A(20) VALUE ‘GeekForGeeks’. /*the ST_NAME is initialised as a Alphabetic value with the help of picture clause using symbol A which can hold 20 characters*/
4. 价值条款
它用于初始化上述代码中的数据项示例 PHONE_NUMBER 的默认值为 785955477,在 value 子句的帮助下定义。使用 value 子句是可选的。
当我们编译并执行上述代码时,它会显示使用 Values 子句定义的值
例子:
02 PHONE_NUMBER PIC 9(10) VALUE 7845955477. /* PHONE_NUMBER is holding default value 7845955477 which will be displayed if not other values is assigned */
02 ST_NAME PIC A(20) VALUE ‘GeekForGeeks’. /* ST_NAME is holding default string value “GeekForGeeks” defined with keyword VALUE*/