(1/4)问题
假如某结构中包括A、B两个字段,LOOP内表时,AT NEW A、AT END OF A时,B的值是*,怎么办呢?
以前,我都是在LOOP时把工作区的内容赋给另外一个临时的工作区,
LOOP AT itab into wa.
wa_temp = wa.
AT NEW a.
ENDAT.
ENDLOOP.
再用AT NEW等事件的。
不过今天在解决凯神的一个小问题时,偶然得到了一个其他的解决办法。
(2/4)代码
废话不说了,上代码。
TYPES:BEGIN OF ty_data,
a TYPE c,
b TYPE char2,
END OF ty_data.
DATA: ls_data TYPE ty_data,
lt_data TYPE TABLE OF ty_data.
FIELD-SYMBOLS:<ls_data> TYPE ty_data.
ls_data-a = 'A'. ls_data-b = 'A1'. APPEND ls_data TO lt_data.
ls_data-a = 'A'. ls_data-b = 'A2'. APPEND ls_data TO lt_data.
LOOP AT lt_data INTO ls_data.
AT NEW a.
WRITE: 'NEW', ls_data-a, ls_data-b, /.
ENDAT.
AT END OF a.
WRITE: 'END', ls_data-a, ls_data-b, /.
ENDAT.
ENDLOOP.
LOOP AT lt_data ASSIGNING <ls_data>.
AT NEW a.
WRITE: 'NEW', <ls_data>-a, <ls_data>-b, /.
ENDAT.
AT END OF a.
WRITE: 'END', <ls_data>-a, <ls_data>-b, /.
ENDAT.
ENDLOOP.
LOOP AT lt_data INTO <ls_data>.
AT NEW a.
WRITE: 'NEW', <ls_data>-a, <ls_data>-b, /.
ENDAT.
AT END OF a.
WRITE: 'END', <ls_data>-a, <ls_data>-b, /.
ENDAT.
ENDLOOP.
(3/4)执行结果
1、水平有限,之前没发现LOOP AT itab ASSIGN <fs>还有这个好处,规避了AT NEW事件里,字段变*的情况
2、LOOP INTO是把内表的内容COPY到工作区中,而LOOP ASSIGN是用一个指针指向当前的工作区,所以内容不会变成*
3、注意不要写成LOOP INTO <fs>哦
(4/4)最后
嗯嗯,末了了,提个不太相干的小问题,如果:
A TYPE STRING,B TYPE STRING
那么结果会是什么样的呢?
想知道就去测测吧,我就不在留言里写答案了,哈哈!
ABAP文章汇总:
https://mp.weixin.qq.com/s/djmMeM0qfDxPPwxbjuJABA
Excel文章汇总:
https://mp.weixin.qq.com/s/NwJ0SzIrn9hVmaCMo-UYyA
网盘永久链接:
https://mp.weixin.qq.com/s/f_WwKZdwM-vPEstTjjz_eQ
关注公众号,点下方菜单打开上面的链接,更方便哦。
笔者微信:286503700(QQ同号)
如果喜欢,谢谢转发。