ABAP学习笔记之——第二章:数据类型

一、数据类型

        数据类型在 ABAP 程序中用于定义变量类型。数据类型和数据对象是单独声明的,数据对象则参照数据类型定义。在程序中利用 TYPES 语句声明数据类型,这种数据类型只能在该程序中使用,因此也称为本地数据类型。本地数据类型参照已有的 ABAP 数据类型进行声明从数据类型层面考虑,ABAP 程序的特点是可以参照ABAP 数据字典自身的数据类型定义变量,这种特征便于开发者编程。

二、数据类型的种类

ABAP学习笔记之——第二章:数据类型_第1张图片

 三、ABAP基本数据类型

ABAP基本数据类型是系统内部定义的数据类型。

同C、Java 语言中的c、d、f、i、n类型一样,是系统内部已定义的数据类型另外,ABAP语言中还存在p、t、类型

ABAP学习笔记之——第二章:数据类型_第2张图片

数字型:

(1)整数型I

值范围为-2147483648~2147483647(2的31次方)

只支持整数类型。

非整数型数据会进行四舍五入(Round)。

用于计算行数、条目数、索引值等

(2)小数型 Packed numbers of Type P

允许有小数位。

可用长度为 1~16,小数位最大长度为 14 位。

程序属性设置,应选择 Fixed point arithmetic。若不选择,类型P就没有意义,与整数类型相同。常使用于精度比较高的数据

例:

*packed数据类型基本操作
DATA : packed_1      TYPE p DECIMALS 2 VALUE '2.17',
       packed_2      TYPE p DECIMALS 2 VALUE '5.43',
       packed_result TYPE p DECIMALS 2.
packed_result = packed_2 / packed_1.
WRITE: / packed_result.


MULTIPLY packed_result BY packed_2.
WRITE: / packed_result.

(3)浮点型 F

值范围为1X(10的-307次方)~1X(10的308次方)

用于定义指数(exponent),因此需要调用“FLTP CHAR CONVERSION”函数把其

类型转换成其他数据类型后才可以输出。

类型 F转换成二进制时会发生进位误差

若要显示高精度的数据,则应该使用类型 P。

数值较大或者不需要进行四舍五入时可以使用类型 F(因为在取近似值时使用,因此使用时需要注意)。

例:

*       浮点型数据类型基本操作

DATA : gv_float1  TYPE f VALUE '1.337',
       gv_float2  TYPE f VALUE '2.7',
       gv_fresult TYPE f,
       gv_cresult TYPE c LENGTH 16.

gv_fresult = gv_float2 * gv_float1.
WRITE: / gv_fresult.

CALL FUNCTION 'FLTP_CHAR_CONVERSION'
  EXPORTING
    decim = 2
    input = gv_fresult
  IMPORTING
    flstr = gv_cresult.

CALL FUNCTION 'FLTP_CHAR_CONVERSION'.
WRITE: / gv_cresult.

 数值基本运算规则:

ABAP学习笔记之——第二章:数据类型_第3张图片

常用函数:

ABAP学习笔记之——第二章:数据类型_第4张图片 Floating-Point 函数

ABAP学习笔记之——第二章:数据类型_第5张图片

字符型:

字符串类型也称为字符串字段,分为以下 4种

C:用于定义文字、数字、特殊文字。

N:用于显示C类型数字,以字符串形式显示整数

D:日期类型。

T:时间类型

STRING:不定长的字符型

ABAP学习笔记之——第二章:数据类型_第6张图片

例:

*       字符串类型基本操作
DATA : gv_str TYPE string,
       gv_chr(6) TYPE c.
*查找字符串
gv_str = 'ABAP'.
gv_chr = 'AB'.
FIND gv_chr IN gv_str.
IF sy-subrc EQ 0.
  WRITE 'B FOUND'.
ENDIF.

*字符串替换
gv_str = 'ABAP'.
gv_chr = 'BBAP'.
REPLACE 'ABAP' IN gv_str WITH gv_chr.
WRITE: / gv_str.

*大小写转换
gv_str = 'ABAP'.
TRANSLATE gv_str TO LOWER CASE .
WRITE : / gv_str.

*字符串ABAP依次向左移动
gv_str = 'ABAP'.
SHIFT gv_str.
WRITE : / gv_str.

*去除字符串空格
gv_str = 'AB AP'.
CONDENSE gv_str NO-GAPS.
WRITE : / gv_str.

*填充空格,但不覆盖原有字符
gv_str = ' B P'.
gv_chr = 'AAAA'.
OVERLAY gv_str WITH gv_chr.
WRITE : / gv_str.

*一指定字符串分割成多个字符串。
gv_str = 'AB,AP'.
SPLIT gv_str AT ',' INTO  gv_str gv_chr.
WRITE : / 'split: ' ,gv_str,
/ gv_chr.

*以上字符串输出结果如下:
* B FOUND
* BBAP
* abap

 四、局部数据类型

在ABAP 程序中用ABAP 基本数据类型定义局部数据类型。另外,还可以定义包含多ABAP基本数据类型的结构体(Structure)类型。

声明类型

定义结构体类型

五、全局数据类型

全局数据类型是指所有程序都可以使用的数据类型。

可以用TYPE语句参照ABAP 数据字典里的数据类型定义变量。即SE11创建的ABAP数据字典的对象都可以用于定义数据变量。表(表字段)数据类型、数据元素、结构体 表类型,利用这些 ABAP 数据字典对象可以声明程序内部数据类型及数据变量。

六、声明数据类型

数据变量

数据变量(Data variable) 是在程序中参照数据类型(Data Type)定义的值。从技术角度考虑,ABAP 程序里是通过变量名对此变量进行操作的 (首先执行解析数据类型的操作)。在ABAP程序中最常用的方法是用 Data 语定义变量。

数据对象

前面所定义的变量实际是指数据对象。所谓的数据对象只有在程序执行期间占用内存物理地址。ABAP 语句首先利用数据对象名称确认地址,然后根据参照数据类型的字段长度及小数位等信息解析内容。数据对象里存在没有固定名称的类型,如(WRITE'ABCDE')Text Symbol ( WRITE text-001 ) 、 Variable ( DATASTATICSCLASS-DATAPARAMETERS...)Constants 等类型。

ABAP命名规则

 SAP 规定创建ABAP 数据字典的程序及数据对象后命名时要以Z或Y开头且不能使用如INSERT/APPEND等关键字。此外,每个客户自己制定统一规范并遵守即可。接下来确认下在 ABAP程序中要使用的命名规则(不会涉及类似于表、结构体、锁等 ABAP 数据字典)。ABAP 程序中允许定义的变量名最大长度为 30 位,其中包含“”符号。下图充分说明了在实际业务中使用的典型命名规则。变量名的前 2 位表示范围及类型,区分符号“”和最后单词将省略变量的具体功能。

ABAP学习笔记之——第二章:数据类型_第7张图片

定义全局变量 

全局变量(Global Variable) 是指在一个程序或函数内可以访问的数据类型。在程序内部的所有领域里都可以参照并修改,因此没有局域性。在程序激活状态下全局变量一直占用着内存地址。定义全局变量时变量名以 G 开头。

ABAP学习笔记之——第二章:数据类型_第8张图片

定义局部变量

局部变量(Local Variable)是指只有在程序模块内部有效的变量。所谓的模块是指函数子程序等为了实现单位功能集合成块的代码。

ABAP学习笔记之——第二章:数据类型_第9张图片

七、ABAP 数据字典数据类型

ABAP 数据字典中的数据类型为全局数据类型。ABAP 数据字典(表、结构体、数据元是在所有程序中都可以用来声明变量的因素。素)ABAP数据字典类型大致分为下列3种形式

表及视图:..TYPE dbtab,TYPE dbtab-comp

数据类型:数据元素,结构体,表类型

类型组(Type Groups)

 参照表、视图声明数据类型

例:

DATA : gs_sflight TYPE sflight.
SELECT SINGLE * FROM sflight INTO gs_sflight
WHERE carrid = 'AA'.

WRITE: /
gs_sflight-carrid,
gs_sflight-connid,
gs_sflight-fldate,
gs_sflight-price,
gs_sflight-currency,
gs_sflight-planetype.

参照基本数据类型定义变量

数据元素:ABAP 数据字典中用数据元素 (Data Element)定义个别字段。

ABAP学习笔记之——第二章:数据类型_第10张图片

 利用结构体的TYPE定义

例:

DATA gs_str TYPE zstructr.

gs_str-col1 = '1'.
gs_str-col2 = 'STRUCTURE'.
gs_str-col3 = 'ABAP DICTIONARY TEST'.

WRITE : gs_str-col1,gs_str-col2,gs_str-col3.

利用类型组的type定义:

ABAP学习笔记之——第二章:数据类型_第11张图片

例:

*利用类型组 TYPE 定义
DATA:gv_tgrp1 TYPE ztgrp_type1,
     gv_tgrp2 TYPE ztgrp_type2.

gv_tgrp1 = 'TYPE GROUP'.
gv_tgrp2-col1 = 'TEST'.
gv_tgrp2-col2 = 7.
WRITE:gv_tgrp1,gv_tgrp2-col1,gv_tgrp2-col2,ztgrp_name

 八、ABAP基本数据类型与数据字典类型:

ABAP学习笔记之——第二章:数据类型_第12张图片

ABAP学习笔记之——第二章:数据类型_第13张图片

九、赋值

给变量赋值:

        在定义变量的时候可以用value给变量赋值,在程序运行过程中,可以使用move和write to 给变量赋值,此外,move to同=或equals相同。

        复制符字段值时可以使用MOVE-CORRESPONDING 语。这时和 string2>的字段名可以不相同。MOVE-CORRESPONDING 语句还经常用于不同结构体之间赋值,其特点是找到名字相同的字段名进行赋值。当字段名及顺序不同的结构体之间相互赋值时,如果用 MOVE 语句,则会按顺序进行赋值,因此要使用MOVE-CORRESPONDING语句。

例:(给结构体赋值)

*     结构体赋值
DATA :BEGIN OF gs_ren,
        name  TYPE c LENGTH 10 VALUE 'KETMI',
        age   TYPE i VALUE 20,
        city  TYPE c LENGTH 15 VALUE 'SHANGHAI',
        pnone TYPE c LENGTH 11 VALUE '12345678910',
      END OF gs_ren.

DATA :BEGIN OF gs_info,
        name   TYPE c LENGTH 10,
        city   TYPE c LENGTH 15,
        school TYPE c LENGTH 10 VALUE '学校',
      END OF gs_INFO.

MOVE-CORRESPONDING gs_ren TO gs_info.

WRITE : / gs_info-name,
/ gs_info-city,
/ gs_info-school.

利用offset赋值:

例:

*利用offset赋值
DATA:gv_f1(8)  VALUE 'ABCDEF',
     gv_f2(8),
     gv_start  TYPE i VALUE 2,
     gv_length TYPE i VALUE 4.
MOVE gv_f1 TO gv_f2.
WRITE : / gv_f2.

CLEAR gv_f2.
MOVE gv_f1+2(3) TO gv_f2.
WRITE : / gv_f2.

CLEAR gv_f2.
MOVE gv_f1+gv_start(gv_length) TO gv_f2.
WRITE : / gv_f2.

结构体之间的运算操作: 

ABAP学习笔记之——第二章:数据类型_第14张图片

例:

* 结构体运算
DATA:BEGIN OF gs_rate,
       peng TYPE f VALUE '0.8',
       zhou TYPE f VALUE '1.0',
     END OF gs_rate.

DATA : BEGIN OF gs_result,
         peng TYPE i VALUE 95,
         zhou TYPE i VALUE 70,
       END OF gs_result.

MULTIPLY-CORRESPONDING gs_result BY gs_rate.
WRITE : 'TEST RESULT', 'PENG:',gs_result-peng,'ZHOU:',gs_result-zhou.

 十、定义其他变量:

常量:

程序中经常使用的值可以定义为常量(constant)。定义常量后在程序内不可以进行修改在程序内会重复多次使用常量,当需要修改常量时只需修改一处即可,这样就可以节省时间。另外为数字起有意义的名字作为常量使用可以提高程序的可读性。

例:

*定义常量
CONSTANTS:c_company(10) VALUE 'CNS'.
CONSTANTS:BEGIN OF c_people,
            name(20)    VALUE 'ZHOU WEN WOO',
            country(10) VALUE 'CHINA',
          END OF c_people.

WRITE: c_company,c_people-name,c_people-country.

静态变量:在子程序块(FORMFUNCTION )中要持续保存局部变量值时定义为静态变量STATICS)。即在FORM语块内用STATICS 定义的局部变量的值可以保持到程序结束。

 例:

*静态变量
DO 3 TIMES.
  PERFORM call_subr.
ENDDO.

FORM call_subr.
  STATICS lv_val TYPE i.

  lv_val = lv_val + 1.
  WRITE : / 'STATIC VARIABLE:',lv_val.
ENDFORM.
DATA : GV_RESULT TYPE I.

DO 3 TIMES.
PERFORM CALL_SUBR.
ENDDO.

FORM CALL_SUBR.
  DATA LV_VAL TYPE I.
  LV_VAL = LV_VAL + 1.
  WRITE: / 'LOCAL VARIABLE:',LV_VAL.
  ENDFORM.

TABLES:使用TABLES 语句定义 ABAP 数据字典中的数据表视图、结构体,会生成与 ABAP数据字典具有相同结构的数据对象。这种表工作区,在程序中与结构体的用法相同。

END........

你可能感兴趣的:(SAP,ABAP开发专栏,开发语言)