1、ABAP字段的相关知识要将单个字 符串连接成 一体,请使 用 CONCATENATE 语句,用法 如下:语法CONCATENATE . INTO SEPARATED BY .该语句连接 字符串 与 并将结果赋 给 。该操作忽略 尾部空格。附加 SEPARATED BY 允许指定字 符字段 ,它 放置在单个 字段间已定 义的长度中 。如果结果符 合 ,则 将 SY-SUBRC 设置为0。 然而,如果 结果必须被 截断,则将 SY-SUBRC设 置为4。DATA: C1(10) VALUE Sum, C2(3) VALUE mer, C3(5) VALUE holi , C4(10) VALUE
2、day, C5(30), SEP(3) VALUE - .CONCATENATE C1 C2 C3 C4 INTO C5.WRITE C5.CONCATENATE C1 C2 C3 C4 INTO C5 SEPARATED BY SEP.WRITE / C5.该过程的输 出如下:SummerholidaySum - mer - holi - day在 C1 到 C5 之间,忽略 尾部空格。 分隔符 SEP 保留尾部空 格。增加前導零以及去掉前導零函數DATA:ebeln TYPE ekko-ebeln.增加前导零CALL FUNCTION CONVERSION_EXIT_ALPHA_INPUT
3、 EXPORTING input = ebeln IMPORTING output = ebeln.去掉前导零CALL FUNCTION CONVERSION_EXIT_ALPHA_OUTPUT EXPORTING input = ebeln IMPORTING output = ebeln.去掉小数点后面的零:data I TYPE P DECIMALS 3.DATA TC(10) TYPE C.I = 3.100.TC = I.WRITE I.WRITE TC.I = I * 1.TC = TC * 1.WRITE TC.TC = TC * I.WRITE TC.WRITE I .3.5
4、数据的转换及运算在程序中经常会遇到不同数据类型之间的赋值转换需求。本节将简要介绍在ABAP中数据转换的基本方法。3.5.1 数据类型的转换在不同的数据对象之间赋值时,系统会自动进行类型转换,转换过程遵照固定规则进行,例如将一个C类型数据赋值给N类型的对象,只有数字字符被传递,其他字符则被忽略。1. DATA:TEXT(10)TYPECVALUEABC1234567, 2. NUM(10)TYPEN, 3. INTTYPEI. 4. NUM=TEXT. 5. INT=NUM. 6. WRITE:NUM,INT.上例的输出结果为:0001234567 1,234,567,变量TEXT赋值给NUM时
5、,ABC被转换为000,当NUM赋值给INT时,默认取其整数部分。需注意的是,C类型不能直接赋值给I,如果上例中语句写为TEXT = NUM,系统将报错提示数据类型转换错误。ABAP中还可以使用以下语法实现数据间赋值:1. MOVEATOB. 2. WRITEATOB.A和B可以是不同类型的变量。当然,与直接赋值方法一样,类型转换在不同类型间还是有一定限制的,读者可以在实际开发中揣摩。不同进制之间的转换可参考如下方法:1. DATA:CHRTYPEC. 2. FIELD-SYMBOLS:TYPEX,定义一个十六进制的指针类型 3. TYPEC. 4. CHR=A. 5. ASSIGNCHRTO
6、CASTING.将字符转换为十六进制 6. =+1. 7. ASSIGNTOCASTING.将十六进制指针对象转换为字符指针对象 8. MOVETOCHR.将指针变量赋值到字符变量1. 数字类型(numeric types)(1).类型 Abap支持三种数字类型: I:整型 范围:-2147483648 to 2147483647 P:16位 范围:取决于小数位的长度 注意事项:为了确保计算正确,必须在程序属性中把fixed point arithmetic选中,参考图1。 F:浮点类型 范围:+/- 2.2250738585072014E-308 to 1.7976931348623157E
7、+308 注意事项:因为长度的关系,所以尽量不要用两个该类型的数据相等作为判断条件(2).定义方法 f1 type I. f1 type P decimals num. f1 type F.(3).使用 I类型: 主要是用于计数器,数量,索引,偏移量等等 例如: *取得内表行数 DATA: V_COUNTER TYPE I. V_COUNTER = LINES( I_TAB ). *根据索引读取内表中的数据 DATA: V_INDEX TYPE I. READ TABLE I_TAB INDEX V_INDEX. *截取字符串 DATA: V_OFFSET_START TYPE I, V_OF
8、FSET_LENGTH TYPE I, V_C(10) TYPE C, L_C(3) TYPE C. 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:应该算是字符
9、型的数字 D:日期类型,标准长度8(YYYYMMDD),注意其初期值的判断,不是space,而是00000000,判断语句可以使用is initial or not。 T:时间类型,标准长度6(HHMMSS) 二具体使用: 1对字符串的操作 1).SHIFT:截断字符串 SHIFT c BY n PLACES mode.: 作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。可以首先获得该字符串的长度,方法:lenSTRLEN(C)。 Mode:指定字符串截断的方向。 LEF
10、T:从左边截断 RIGHT:从右边截断 CIRCULAR:把左边的字符放到右边。 SHIFT c UP TO str mode.: 作用:把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。 SHIFT c LEFT DELETING LEADING str. SHIFT c RIGHT DELETING TRAILING str.: 作用:这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。 以上语句常用的场合: A去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,
11、那么就可以这样做:SHIFT c LEFT DELETING LEADING 0. B已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:SHIFT c UP TO str。例如:某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te去掉,mrp可以在固定值表中取得,则可以使用SHIFT c UP TO MRP. 2).REPLACE:替换字符串 REPLACE str1 WITH str2 INTO c
12、 LENGTH l.: 作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。 常用场合: 字符串的替换操作比较常用,需要注意的是l的指定长度。 3). TRANSLATE:转换字符串 TRANSLATE c TO UPPER CASE. TRANSLATE c TO LOWER CASE.: 作用:字符串的大小写的转换 TRANSLATE c USING r. : 作用:根据规则r转换字符串c 常用场合: Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。
13、转换规则倒是不太常用,到现在我还没有遇到过。 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的指定: 主要用到的就是:STARTING AT n1指定开始位置 ENDING AT n2指定结束位置 常用场合: 一般用来判断某
14、个字符串是否符合条件。也可以结合其他语句对字符串进行操作。 5).CONDENSE:去掉字符串中的空格 CONDENSE c NO-GAPS.: 作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。 常用场合:获得字符串的精确长度,用于判断。 6).SPLIT:拆分字符串 SPLIT c AT del INTO c1 . cn. 作用:按照分割字符del把字符串c分割成c1cn。 SPLIT c AT del INTO TABLE itab. 作用:按照分割字符del把c分割,然后放到内表中的相应字段 常用场合: 文件名的分割,根据完整的文件路径加文件名把文
15、件名分割出来。 难点:无法确定要分割多少次. 解决方法:两两分割,到最后的那个就是了。例如:str=c:dir1dir2dir3file Split str at into str1 str2. Find str2 for /. Check sy-subrc = 0. Do. Find str2 for /. If sy-subrc = 0. Split str2 into str1 str2. Else. Exit. Endif. Enddo. 文件上传的类型是字符串,把其分割后放到内表中。例如上面的问题: data: begin of itab occurs 0 , col1(30) ty
16、pe c, end of itab. Split str at into table itab. describe table itab lines line. Read table itab index line. Itab-col1就是file 7).CONCATENATE:连接字符串 CONCATENATE c1 . cn INTO c SEPARATED BY s. 作用:把c1cn用s分隔连接到c中 常用场合:文件下载,对文件中的字段编辑。移动字段串 到给定串要移动字段 内容以到给 定串,则使 用 SHIFT 语句,用法 如下:语法SHIFT UP TO .ABAP/4 查找 字段内
17、容直 到找到字符 串 并将字段 移动到字段 边缘。 选项与按给定位置 数移动字段 串 中所 述相同。 可为变量。如果 中找不到 , 则将 SY-SUBRC 设置为 4 并且不移动 。否 则,将 SY-SUBRC 设置为0。DATA: T(10) VALUE abcdefghij,STRING LIKE T,STR(2) VALUE ef.STRING = T.WRITE STRING.SHIFT STRING UP TO STR.WRITE / STRING.STRING = T.SHIFT STRING UP TO STR LEFT.WRITE / STRING.STRING = T.SHI
18、FT STRING UP TO STR RIGHT.WRITE / STRING.STRING = T.SHIFT STRING UP TO STR CIRCULAR.WRITE / STRING.输出如下:abcdefghijefghijabcdefefghijabcd根据第一个 或最后一个 字符移动字 段串假设第一个 或最后一个 字符符合一 定条件,则 可用 SHIFT 语句将字段 向左或向右 移动。为此 ,请使用以 下语法:语法SHIFT LEFT DELETING LEADING .SHIFT RIGHT DELETING TRAILING .假设左边的 第一个字符 或右边的最 后一个
19、字符 出现在 中,该语句 将字段 向左或向右 移动。字段 右边或左边 用空格填充 。 可为变量。DATA: T(14) VALUE abcdefghij,STRING LIKE T,STR(6) VALUE ghijkl.STRING = T.WRITE STRING.SHIFT STRING LEFT DELETING LEADING SPACE.WRITE / STRING.STRING = T.SHIFT STRING RIGHT DELETING TRAILING STR.WRITE / STRING.该过程输出 如下:abcdefghijabcdefghijabcdef替换字段内 容
20、要用其它字 符串替换字 段串的某些 部分,请使 用 REPLACE 语句。语法REPLACE WITH INTO LENGTH .ABAP/4 搜索字段 中模式 前 个位置第一 次出现的地 方。如果未 指定长度, 按全长度搜 索模式 。然后,语句 将模式 在字段 中第一次出 现的位置用 字符串 替换。如果 指定长度,则只替换模 式的相关部 分。如果将系统 字段 SY-SUBRC 的返回代码 设置为0, 则说明在 中找到 且已用 替换。非 0 的返回代码 值意味着未 替换。、 和 可为变量。DATA: T(10) VALUE abcdefghij,STRING LIKE T,STR1(4) VA
21、LUE cdef,STR2(4) VALUE klmn,STR3(2) VALUE kl,STR4(6) VALUE klmnop,LEN TYPE I VALUE 2.STRING = T.WRITE STRING.REPLACE STR1 WITH STR2 INTO STRING.WRITE / STRING.STRING = T.REPLACE STR1 WITH STR2 INTO STRING LENGTH LEN.SWRTIRITEN G / = ST.RI NG.REPLACE STR1 WITH STR3 INTO STRING.WRITE / STRING.STRING =
22、 T.REPLACE STR1 WITH STR4 INTO STRING.WRITE / STRING.该过程的输 出如下:abcdefghijabklmnghijabklmnefghabklghijabklmnopgh请注意,在 最后一行中 ,字段 STRING 是如何在右 边截断的。 长度为 4 的搜索模式cdef 用长度为6的 klmnop 替换。然后 ,填充字段 STRING 的剩余部分 直到字段结 尾。转换大/小 写并替换字 符可以将字母 转换大/小 写或使用替 换规则。要转换大/小 写,请使用 TRANSLATE 语句,用法 如下:语法TRANSLATE TO UPPER CAS
23、E.TRANSLATE TO LOWER CASE.这些语句将 字段 中的所有小 写字母转换 成大写或反 之。使用替换规 则时,请使 用以下语法 :语法TRANSLATE USING .该语句根据 字段 中存储的替 换规则替换 字段 的所有字符 。 包含成对字 母,其中每 对的第一个 字母用第二 个字母替换 。 可为变量。有关包含更 复杂替换规 则的 TRANSLATE 语句的更多 变体,参见 关键字文档 。DATA: T(10) VALUE AbCdEfGhIj,STRING LIKE T,RULE(20) VALUE AxbXCydYEzfZ.STRING = T.WRITE STRING.TRANSLATE STRING TO UPPER CASE.WRITE / STRING.STRING = T.TRANSLATE STRING TO LOWER CASE.WRITE / STRING.STRING = T.TRANSLATE STRING USING RULE.WRITE / STRING.该过程的输 出如下:AbCdEfGhIjABCDEFGHIJabcdefghijxXyYzZGhIj
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1