ABAP中,想用内表A某一字段abc的值,替换另一内表B字段xyz原有的值,请问该如何实现。

ABAP中,想用内表A某一字段abc的值,替换另一内表B字段xyz原有的值,请问该如何实现。,第1张

data: wa_A like line of itab_A,

wa_B like line of itab_B.

loop at itab_A into wa_A.

read table itab_B into wa_B index sy-tabix.

if sy-subrc eq 0.

wa_B-xyz = wa_A-abc.

modify itab_B from wa_B index sy-tabix transporting xyz.

endif.

endloop.

ABAP中对矩阵运算就是循环,然唯指并后按照字段名字来加减乘除运算,或者水平较高可以考虑用循环或者按照index直接读取表来定位行,用field-symbol的index来定位列的方法进行加减乘除运算。具逗档体就是熟练使用相指迹应的语法了

语句连接字串s1...sn并将结果赋给s_dest,其中s_dest也可以是s1...sn中的某个变量。选项拦梁漏SEPARATED BY 用于指定一个字串作为分隔符,在构成新字串时插入在s1...sn之间。如果连接后的长度超过了目标数据定义长度,则把截断赋给c。如结果出现截断情况,SY-SUBRC返回4,否则该值返回0.要避免截断,可以将将c定义为String,该类型长度自适应。

该语句在源字串中搜索分隔符sep,并根据该分割符将元字串拆成各个小串放到目标字段s1 ... sn中,这些子串不包括分隔符。与连接语句类型,如结果出现截断情况,SY-SUBRC返回4,否则该值返回0。如果源子串能够拆分的子串多过指定数目,则源子串最后剩余部分包括其后的分割符都将写入最后一个子串,要避免这种情况,需要使用内表进行 *** 作。

SPLIT s_source AT sep INTO TABLE itab.

语句LOOP AT用于循环输出内表的每一行数据。

改语句在字段c中查找字符串str。如果找到,则将SY-SUBRC返回0,SY-FDPOS返回字段c中该字符串的位置(从做算起的字节偏移量),否则将SY-SUBRC返回4。所谓模式是指要查找的字串不一定与str完全一致,可以设定忽略或保留str末尾的空格,或利用通配符“*”扩大其查找灵活性,由下列几种模式:

该语句对字段s_dest进行搜索,如果在其中出现了字符串str1,则用str2替换第一次出现的部分。如果未指定长度,则搜索整个s_dest。如果指定长度len,则只搜索前len个字节。如果字段SY-SUBRC返回0,则说明已经替换;非0则意味着未进行替换。

字符型逻辑表达式用于判断两个字符串之间的包含关系

CO,CN,CA,NA比较时要区分大小写,并且尾部空格也在比较的范围之内;使用CS,NS,CP,NP比较时简烂忽略尾部空格并且比较不区分大小写。比较结束后,如果结果为真,系统字段SY-FDPOS将给出s2在s1中偏移量信息。

CP和NP被称为模式比较逻辑表达式,意义在于可以使用通配符。

“*”用于替代任何字符串,“+”用于替代任何单个字符。

如需对大小写或尾部空格进行区分比较,需要将换码字符“#”放到相应的字符前。下面列出可以使用“#”指定的功能:

通渣卜常,必须将偏移量和长度指定为无符号数。然而,一下情况中可以使用变量动态指定:

对字符类型,数值文本字段,十六进制字段,日期和时间字段指定偏移量是有意义的;类型F,I,P数值字段则不要使用指定偏移量。

DATA : LV_STR TYPE CHAR20.

DATA : LV_LINE TYPE SY-INDEX.

DATA : LV_INDEX TYPE SY-INDEX.

DATA : LV_TABIX TYPE SY-TABIX.

DATA : LV_CHAR TYPE C.

DATA : LV_C TYPE C.

" 第一种

LV_STR = 'ABAADDD435345AD3'.

LV_LINE = STRLEN( LV_STR ).

WRITE : / 'Old value : ', LV_STR.

CLEAR : LV_INDEX, LV_TABIX, LV_CHAR, LV_C.

DO LV_LINE TIMES.

LV_CHAR = LV_STR+LV_INDEX(1).

IF LV_CHAR EQ 'A'.

LV_TABIX = LV_INDEX + 1.

LV_STR+LV_TABIX(1) = 1.

CONDENSE LV_STR.

ENDIF.

LV_INDEX = LV_INDEX + 1.

ENDDO.

WRITE : / 'New value : ', LV_STR.

" 第二种

LV_STR = 'ABAADDD435345AD3'.

LV_LINE = STRLEN( LV_STR ).

WRITE : / SY-ULINE.

WRITE : / 'Old value : ', LV_STR.

CLEAR : LV_INDEX, LV_TABIX, LV_CHAR, LV_C.

DO LV_LINE TIMES.

LV_CHAR = LV_STR+LV_INDEX(1).

IF LV_C EQ 'A' AND LV_CHAR NE 'A'.

LV_STR+LV_INDEX(1) = 1.

CONDENSE LV_STR.

ENDIF.

LV_C = LV_CHAR.

LV_INDEX = LV_INDEX + 1.

ENDDO.

WRITE : / 'New value : ', LV_STR.

结果:

1,

Old value : ABAADDD435345AD3

New value : A1A1DDD435345A13

2,

Old value : ABAADDD435345AD3

New value : A1AA1DD435345A13


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12317263.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存