ABAP字段的相关知识.docx

上传人:b****3 文档编号:5355366 上传时间:2022-12-15 格式:DOCX 页数:11 大小:20.65KB
下载 相关 举报
ABAP字段的相关知识.docx_第1页
第1页 / 共11页
ABAP字段的相关知识.docx_第2页
第2页 / 共11页
ABAP字段的相关知识.docx_第3页
第3页 / 共11页
ABAP字段的相关知识.docx_第4页
第4页 / 共11页
ABAP字段的相关知识.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

ABAP字段的相关知识.docx

《ABAP字段的相关知识.docx》由会员分享,可在线阅读,更多相关《ABAP字段的相关知识.docx(11页珍藏版)》请在冰豆网上搜索。

ABAP字段的相关知识.docx

ABAP字段的相关知识

要将单个字符串连接成一体,请使用CONCATENATE语句,用法如下:

语法

CONCATENATE...INTO[SEPARATEDBY].

该语句连接字符串并将结果赋给

该操作忽略尾部空格。

附加SEPARATEDBY允许指定字符字段,它放置在单个字段间已定义的长度中。

如果结果符合,则将SY-SUBRC设置为0。

然而,如果结果必须被截断,则将SY-SUBRC设置为4。

DATA:

C1(10) VALUE 'Sum',

     C2(3)  VALUE 'mer',

     C3(5)  VALUE 'holi',

     C4(10) VALUE 'day',

     C5(30),

     SEP(3) VALUE'-'.

CONCATENATEC1C2C3C4INTOC5.

WRITEC5.

CONCATENATEC1C2C3C4INTOC5SEPARATEDBYSEP.

WRITE/C5.

该过程的输出如下:

Summerholiday

Sum-mer-holi-day

在C1到C5之间,忽略尾部空格。

分隔符SEP保留尾部空格。

增加前導零以及去掉前導零函數

DATA:

ebelnTYPEekko-ebeln.

"增加前导零

CALLFUNCTION'CONVERSION_EXIT_ALPHA_INPUT'

 EXPORTING

  input =ebeln

 IMPORTING

  output=ebeln.

 

"去掉前导零

CALLFUNCTION'CONVERSION_EXIT_ALPHA_OUTPUT'

 EXPORTING

  input =ebeln

 IMPORTING

  output=ebeln.

 

去掉小数点后面的零:

dataITYPEPDECIMALS3.

DATATC(10)TYPEC.

I='3.100'.

TC=I.

WRITEI.

WRITETC.

I=I*1.

TC=TC*1.

WRITETC.

TC=TC*I.

WRITETC.

WRITEI.

3.5 数据的转换及运算

在程序中经常会遇到不同数据类型之间的赋值转换需求。

本节将简要介绍在ABAP中数据转换的基本方法。

3.5.1 数据类型的转换

在不同的数据对象之间赋值时,系统会自动进行类型转换,转换过程遵照固定规则进行,例如将一个C类型数据赋值给N类型的对象,只有数字字符被传递,其他字符则被忽略。

1.DATA:

 TEXT(10) TYPE C VALUE 'ABC1234567', 

2.      NUM(10) TYPE N, 

3.      INT TYPE I. 

4.NUM = TEXT. 

5.INT = NUM. 

6.WRITE:

 NUM,INT. 

上例的输出结果为:

0001234567 1,234,567,变量TEXT赋值给NUM时,ABC被转换为000,当NUM赋值给INT时,默认取其整数部分。

需注意的是,C类型不能直接赋值给I,如果上例中语句写为TEXT=NUM,系统将报错提示数据类型转换错误。

ABAP中还可以使用以下语法实现数据间赋值:

1.MOVE A TO B. 

2.WRITE A TO B. 

A和B可以是不同类型的变量。

当然,与直接赋值方法一样,类型转换在不同类型间还是有一定限制的,读者可以在实际开发中揣摩。

不同进制之间的转换可参考如下方法:

1.DATA:

 CHR TYPE C. 

2.FIELD-SYMBOLS:

 TYPE X,      "定义一个十六进制的指针类型 

3.              TYPE C. 

4.CHR = 'A'. 

5.ASSIGN CHR TO  CASTING.     "将字符转换为十六进制 

6. =  + 1. 

7.ASSIGN  TO  CASTING.    "将十六进制指针对象转换为字符指针对象 

8.MOVE  TO CHR.               "将指针变量赋值到字符变量 

 

1.数字类型(numerictypes)

(1).类型

  Abap支持三种数字类型:

   I:

整型

     范围:

-2147483648to2147483647

   P:

16位

     范围:

取决于小数位的长度

     注意事项:

为了确保计算正确,必须在程序属性中把fixedpointarithmetic选中,参考图1。

   F:

浮点类型

     范围:

+/-2.2250738585072014E-308to1.7976931348623157E+308

     注意事项:

因为长度的关系,所以尽量不要用两个该类型的数据相等作为判断条件

(2).定义方法

   [f1]typeI.

   [f1]typePdecimals[num].

   [f1]typeF.

(3).使用

   I类型:

     主要是用于计数器,数量,索引,偏移量等等

     例如:

        *取得内表行数

        DATA:

V_COUNTERTYPEI.

        V_COUNTER=LINES(I_TAB).

        *根据索引读取内表中的数据

        DATA:

V_INDEXTYPEI.

        READTABLEI_TABINDEXV_INDEX.

        *截取字符串

        DATA:

V_OFFSET_STARTTYPEI,

              V_OFFSET_LENGTH  TYPEI,

              V_C(10)TYPEC,

               L_C(3) TYPEC.

        V_C=‘ABCDEFGHIJ’.

        V_OFFSET_START=3.

        V_OFFSET_LENGTH  =5

        L_C=V_C+V_OFFSET_START(V_OFFSET_LENGTH).

        RESULT:

          L_C=‘DEFGH’.

   P类型:

     主要和数据库中的QUAN类型关联;

     常用场合:

大小,长度,重量,货币等有单位的场合

     *根据单位把数量写入字符型变量中

     WRITE:

[数量]to[字符型变量]unit[单位].

   F类型:

      常用场合:

计算

字符类型:

  一.包括:

        C:

字符

        N:

应该算是字符型的数字

        D:

日期类型,标准长度8(YYYYMMDD),注意其初期值的判断,不是space,而是'00000000',判断语句可以使用isinitialornot。

        T:

时间类型,标准长度6(HHMMSS)

  二.具体使用:

    1.对字符串的操作

      1).SHIFT:

截断字符串

        SHIFT{c}[BY{n}PLACES][{mode}].:

           作用:

去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。

如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。

可以首先获得该字符串的长度,方法:

len=STRLEN(C)。

               Mode:

指定字符串截断的方向。

                 LEFT:

从左边截断

                 RIGHT:

从右边截断

                 CIRCULAR:

把左边的字符放到右边。

         SHIFT{c}UPTO{str}{mode}.:

            作用:

把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。

         SHIFT{c}LEFTDELETINGLEADING{str}.

         SHIFT{c}RIGHTDELETINGTRAILING{str}.:

            作用:

这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。

         以上语句常用的场合:

           A.去掉字符串中的前导字符。

例如:

如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:

SHIFT{c}LEFTDELETINGLEADING0.

           B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:

SHIFT{c}UPTO{str}。

例如:

某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。

如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,则可以使用SHIFT{c}UPTO'MRP'.

      2).REPLACE:

替换字符串

        REPLACE{str1}WITH{str2}INTO{c}[LENGTH{l}].:

           作用:

把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。

如果替换成功,则SY-SUBRC设置成0。

           常用场合:

               字符串的替换操作比较常用,需要注意的是l的指定长度。

      3).TRANSLATE:

转换字符串

         TRANSLATE{c}TOUPPERCASE.

         TRANSLATE{c}TOLOWERCASE.:

           作用:

字符串的大小写的转换

         TRANSLATE{c}USING{r}.:

           作用:

根据规则r转换字符串c

         常用场合:

            Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。

转换规则倒是不太常用,到现在我还没有遇到过。

      4).SEARCH:

查找字符串

         SEARCH{c}FOR{str}{options}.:

            作用:

在字符串c中查找str,如果找到了,SY-SUBRC为0,SY-FDPOS为找到字符串的具体位置。

            需要说明的地方:

注意模式的使用

               指定str:

查找str,str中后面的空格忽略

               指定.str.:

查找str,包含了str中尾部的空格

               指定*str:

查找以str结尾的字符串

               指定str*:

查找以str开头的字符串

              {options}的指定:

                主要用到的就是:

STARTINGAT{n1}指定开始位置

                                ENDINGAT{n2}指定结束位置

            常用场合:

               一般用来判断某个字符串是否符合条件。

也可以结合其他语句对字符串进行操作。

      5).CONDENSE:

去掉字符串中的空格

         CONDENSE{c}[NO-GAPS].:

            作用:

去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。

            常用场合:

获得字符串的精确长度,用于判断。

      6).SPLIT:

拆分字符串

         SPLIT{c}AT{del}INTO{c1}...{cn}.

            作用:

按照分割字符del把字符串c分割成c1…cn。

         SPLIT{c}AT{del}INTOTABLE{itab}.

             作用:

按照分割字符del把c分割,然后放到内表中的相应字段

          常用场合:

             文件名的分割,根据完整的文件路径加文件名把文件名分割出来。

             难点:

无法确定要分割多少次.

             解决方法:

两两分割,到最后的那个就是了。

例如:

str=c:

\dir1\dir2\dir3\file

                Splitstrat'\'intostr1str2.

                Findstr2for'/'.

                Checksy-subrc=0.

                Do.

                  Findstr2for'/'.

                  Ifsy-subrc=0.

                    Splitstr2intostr1str2.

                  Else.

                    Exit.

                  Endif.

                Enddo.

             文件上传的类型是字符串,把其分割后放到内表中。

例如上面的问题:

               data:

beginofitaboccurs0,

                     col1(30)typec,

                   endofitab.

               Splitstrat'\'intotableitab.

               describetableitablinesline.

               Readtableitabindexline.

               Itab-col1就是file

      7).CONCATENATE:

连接字符串

         CONCATENATE{c1}...{cn}INTO{c}[SEPARATEDBY{s}].

            作用:

把c1…cn用s分隔连接到c中

            常用场合:

文件下载,对文件中的字段编辑。

 

移动字段串到给定串

要移动字段内容以到给定串,则使用SHIFT语句,用法如下:

语法

SHIFTUPTO.

ABAP/4查找字段内容直到找到字符串并将字段移动到字段边缘。

选项与按

给定位置数移动字段串中所述相同。

可为变量。

如果中找不到,则将SY-SUBRC设置为4并且不移动

否则,将SY-SUBRC设置为0。

DATA:

T(10)VALUE'abcdefghij',

STRINGLIKET,

STR

(2)VALUE'ef'.

STRING=T.

WRITESTRING.

SHIFTSTRINGUPTOSTR.

WRITE/STRING.

STRING=T.

SHIFTSTRINGUPTOSTRLEFT.

WRITE/STRING.

STRING=T.

SHIFTSTRINGUPTOSTRRIGHT.

WRITE/STRING.

STRING=T.

SHIFTSTRINGUPTOSTRCIRCULAR.

WRITE/STRING.

输出如下:

abcdefghij

efghij

abcdef

efghijabcd

根据第一个或最后一个字符移动字段串

假设第一个或最后一个字符符合一定条件,则可用SHIFT语句将字段向左或向右移动。

为此,请

使用以下语法:

语法

SHIFTLEFTDELETINGLEADING.

SHIFTRIGHTDELETINGTRAILING.

假设左边的第一个字符或右边的最后一个字符出现在中,该语句将字段向左或向右移

动。

字段右边或左边用空格填充。

可为变量。

DATA:

T(14)VALUE'abcdefghij',

STRINGLIKET,

STR(6)VALUE'ghijkl'.

STRING=T.

WRITESTRING.

SHIFTSTRINGLEFTDELETINGLEADINGSPACE.

WRITE/STRING.

STRING=T.

SHIFTSTRINGRIGHTDELETINGTRAILINGSTR.

WRITE/STRING.

该过程输出如下:

abcdefghij

abcdefghij

abcdef

替换字段内容

要用其它字符串替换字段串的某些部分,请使用REPLACE语句。

语法

REPLACEWITHINTO[LENGTH].

ABAP/4搜索字段中模式个位置第一次出现的地方。

如果未指定长度,按全长度

搜索模式

然后,语句将模式在字段中第一次出现的位置用字符串替换。

如果指定长度

则只替换模式的相关部分。

如果将系统字段SY-SUBRC的返回代码设置为0,则说明在中找到且已用替换。

非0的返回代码值意味着未替换。

可为变量。

DATA:

T(10)VALUE'abcdefghij',

STRINGLIKET,

STR1(4)VALUE'cdef',

STR2(4)VALUE'klmn',

STR3

(2)VALUE'kl',

STR4(6)VALUE'klmnop',

LENTYPEIVALUE2.

STRING=T.

WRITESTRING.

REPLACESTR1WITHSTR2INTOSTRING.

WRITE/STRING.

STRING=T.

REPLACESTR1WITHSTR2INTOSTRINGLENGTHLEN.

SWRTIRITENG/=ST.RING.

REPLACESTR1WITHSTR3INTOSTRING.

WRITE/STRING.

STRING=T.

REPLACESTR1WITHSTR4INTOSTRING.

WRITE/STRING.

该过程的输出如下:

abcdefghij

abklmnghij

abklmnefgh

abklghij

abklmnopgh

请注意,在最后一行中,字段STRING是如何在右边截断的。

长度为4的搜索模式

‘cdef’用长度为6的‘klmnop’替换。

然后,填充字段STRING的剩余部分直到

字段结尾。

转换大/小写并替换字符

可以将字母转换大/小写或使用替换规则。

要转换大/小写,请使用TRANSLATE语句,用法如下:

语法

TRANSLATETOUPPERCASE.

TRANSLATETOLOWERCASE.

这些语句将字段中的所有小写字母转换成大写或反之。

使用替换规则时,请使用以下语法:

语法

TRANSLATEUSING.

该语句根据字段中存储的替换规则替换字段的所有字符。

包含成对字母,其中每对

的第一个字母用第二个字母替换。

可为变量。

有关包含更复杂替换规则的TRANSLATE语句的更多变体,参见关键字文档。

DATA:

T(10)VALUE'AbCdEfGhIj',

STRINGLIKET,

RULE(20)VALUE'AxbXCydYEzfZ'.

STRING=T.

WRITESTRING.

TRANSLATESTRINGTOUPPERCASE.

WRITE/STRING.

STRING=T.

TRANSLATESTRINGTOLOWERCASE.

WRITE/STRING.

STRING=T.

TRANSLATESTRINGUSINGRULE.

WRITE/STRING.

该过程的输出如下:

AbCdEfGhIj

ABCDEFGHIJ

abcdefghij

xXyYzZGhIj

展开阅读全文
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1