Chinaunix首页 | 论坛 | 博客
  • 博客访问: 44165
  • 博文数量: 15
  • 博客积分: 610
  • 博客等级: 上士
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 07:31
文章分类

全部博文(15)

文章存档

2011年(1)

2009年(14)

我的朋友
最近访客

分类:

2009-07-17 07:53:06

ABAP/4数据声明语法
1
、数据类型及其属性
  ABAP/4中按结构和定义对数据类型分类。数据类型是 :

    1)基本的(非结构化的)或结构化的;

    2)预定义的或用户定义的。

基本的(非结构化的)或结构化的:

CText(文本),1字节,1max字节;

DData YYYYMMDD(日期),8字节,8字节;

FFloating point no.(浮点数),标准长度与机器有关,116字节;

IInteger(整型),标准长度与机器有关,116字节;

NNumberic Text(数字文本),1字节,1max字节;

PPacked number(压缩号),标准长度为8字节,允许长度为116字节(以下类似)

TTime HHMMSS(时间),6字节,6字节;

XHexadecimal(十六进制),1字节,1max字节。

等数据类型,其中max为近似64000字节;P类型字段中,一个字节存储两位数字,符号位存储在最后半个字节中,类型I定义为二进制数,取值范围为从-2147748364821477483647;一般来说,类型I用于计数器等,类型P用于商业计算,类型F用于数学计算,ABAP/4的数据域不得超过64000字节

用户定义的基本数据类型完全是以预定义的基本数据类型为基础的。要定义自己的基本数据类型,请使用TYPES语句。

用户定义的基本数据类型使程序的阅读和维护更加容易:

语法:

TYPES [] [].

例:

TYPES: SURNAME(20) TYPE C,

       BEGIN OF ADDRESS,

             NAME TYPE SURNAME,

         ....

       END OF ADDRESS.

DATA:  ADDRESS_1 TYPE ADDRESS,

       ADDRESS_2 TYPE ADDRESS,

示例说明如何使用参数TYPE直接引用用户定义的数据类型。其中主要有三件事情。第一,创建长为20、类型为C的用户定义的数据类型 SURNAME。第二,定义结构化数据类型ADDRESS。将数据类型SURNAME赋给ADDRESSADDRESS-NAME的组件。第三,创建作为字段串的数据对象ADDRESS_1ADDRESS_2...,将它们的类型指定为ADDRESS

2、变量用于以一定名称按一定格式保存并参考数据。变量可能在下列方面不同:名称、类型、长度、结构
 3
、常量的定义
  常量是包含 值的数据对象,该值是在初始化时确定的。在程序执行期间不能更改常量。ABAP/4能够识别的常量有
数字常量文本常量两种,数字常量主要有数据类型PI两种,文本常量主要有数据类型CN,而其余的数据类型由于没有规定常量,则一律使用文本常量。注意,如果你要把一个带有小数点的字段值赋给字段类型P,那么你必须首先把它定义为文本串("2.17")

如果在程序中频繁地需要某特殊数值,请使用常量在这种情况下,请勿使用文字。如果需要修改该值,只须更改声明。
  4、数据的声明
  
,数据的名称与变量的名称一样也有其命名规则。一般数据名称总是以字母作为首字符,余下的字符可以为字母也可以为数字,但除了可以使用下划线以外,不得使用任何其它特殊字符(C/C++标识符一样,字母,数字,下划线,数字不在开头),并且长度不得超过30字节。另外,需要注意的是SPACE是预定义的字段,在ABAP/4语句中,参数名(即关键字的名字)不可以用作字段名。

可以在程序 中使用 DATA 语句的基本 格式以定义 内部变量。语法如下:

语法:   DATA [()] [] [].

基本格式中 ,关键字 DATA 有下列参数 :

              命名变量

      指定变量的数据类型和长度

           指定初始值

     指定小数位数

用于字段串的DATA语句:

字段串是程序中的一组内表。要声明字段串,请使用DATA语句并用BEGIN OFEND OF标记该字段组的起始和结束。语法如下:

语法:

DATA: BEGIN OF ,

               ,

               ..............

      END OF .

这些语句定义了字段串。在 中,通过指定长度、类型和初始值或小数位数(如果需要),可以如 DATA 语句的基本格式中说明的那样声明组件字段。通过将字段串名作为前缀,并用连字符将字段串和组件连接起来:-,可以定址字段串中的各个组件。字段串的组件可以有不同的数据类型。由于类型IF的字段是对齐的(参见对齐数据对象),所以如果需要,系统将在组件之间插入空填充字段。有时也将字段串称为记录或结构。

例:

DATA: BEGIN OF ADDRESS,

         NAME(20)    TYPE C,

         STREET(20)  TYPE C,

         NUMBER      TYPE P,

         POSTCODE(5) TYPE N,

         CITY(20)    TYPE C,

      END OF ADDRESS.

该示例定义了一个长度为73 的字段串ADDRESS。 可以通过ADDRESS-NAMEADDRESS-STREET等定址组件。

在声明数据时,如果没有指定类型,就缺省使用类型C;如果没有规定长度,那么就使用该类型的缺省长度,在声明字段名时,你也可以赋予字段相应的初始值(使用参数VALUE),当然在在VALUE后面,你仅可以指定常量。在声明同一类型的字段时,可以使用LIKE参数,被参照的字段既可以是内部字段,也可以是数据库中的字段。

如果你使用参数来书写程序,那么该程序是很容易修改的,这是因为如果数据属性发生更改的话,你仅须在程序的一个地方进行改动,其它使用LIKE参数定义的数据其定义会自动发生改变。

CLEAR语句可以把字段的值设置为与其类型相符的初始值,或者设置为数据字典中定义的初始值,需要注意的是CLEAR语句不会保存以VALUE参数所规定的初始值。在输出特定类型的字段时,如果在输出字段的输出格式中没有指定长度,就缺省使用标准输出长度。

如果在输出格式中规定的长度超出了必须的长度,那么输出的值根据所规定的输出长度的具体数值或者左对齐或者右对齐。

在类型P或者I的字段值输出时,先导的零被转换为空格,在千位数之间插入逗号。

在输出浮点数时,可以使用WRITE语句的EXPONENT参数来确定指数值;使用参数DECIMALS,你可以在输出类型PI或者F的字段时确定小数点后的位数,最后一位要取舍。

  5、赋值
  有许多ABAP/4语句可以用来给字段赋值,两个最为重要的是
MOVECOMPUTE语句, ,如果字段的类型与长度不匹配所赋的值,那么系统就会自动执行类型转换。另外,可以使用ADDSUBSTRACTMULTIPLYDIVIDE语句进行简单的算术计算。类型转换的规则是这样的:如果类型C的字段值赋给类型P的字段,那么类型C的字段值仅允许+/-以及小数点。如果类型P的字段值赋给类型C的字段,那么就要格式化该数字值并且先导的零被转换为空格,当然如果你不要这种格式化的类型,那么你可以使用UNPACK语句;

    可以在声明语句和操作语句中给数据对象赋值。

    在声明语句中,将初始值赋给声明的数据对象,可以在DATA、常量和STATIC语句中使用VALUE参数。

    在操作语句中给数据对象赋值可以使用MOVE语句和WRITE TO语句

    1MOVE语句赋值(赋值运算符=)

    1)基本赋值操作

语法:MOVE TO . = .

 其中可以是任意数据对象,必须是变量,不能是文字或常量。

    2)用指定偏移量赋值

    语法:MOVE [+][()] TO [+][()].

    [+][()] = [+][()].

    将字段+1开始且长度为的段内容赋给字段,覆盖从位置+1开始且长度为的段。其中所有偏移量和长度指定都可为变量。

    3)在字段串组件之间复制值

    语法:MOVE-CORRESPONDING TO .将字段串组件的内容赋给有相同名称的字段串组件。

    2WRITE TO语句赋值

语法:WRITE TO [

将源字段 内容写入目标字段 可以是任何数据对象。必须是变量,不能是文字或常量。写入后, 内容保持不变。对于 ,可以使用 WRITE 语句的所有格式化选项(UNDER NO-GAP 除外)。

    WRITE TO 语句总是检查用户主记录中的设置 。例如,这些设置指定是将小数点 显示为句号(.),还是逗号(,) 。

    WRITE TO 语句并不遵循类型转换中所述的转换规则。目标字段解释为类型 C 字段。系统总是将源字 段内容转换为类型 C,它不将结果字符串转换为目标字段的数据类型,而直接写入目标字段。因此,不应使用数值数据类型的目标字段。

    WRITE () TO .在运行时指定源字段,系统将赋给 的数据对象值放到 中。

WRITE [+][()] TO [+][()].将字段+1开始且长度为的段内容赋给字段,覆盖从位置+1开始且长度为的段。目标字段的偏移量和长度指定可为变量,只在非数值字段之间采用偏移量和长度指定赋值。




阅读(1601) | 评论(0) | 转发(0) |
0

上一篇:一点知识

下一篇:例子:字符串的反转

给主人留下些什么吧!~~