永发信息网

ABAP SAP 如何将一个内表中的某一行分配给一个field-symbol

答案:3  悬赏:30  手机版
解决时间 2021-04-05 18:10
  • 提问者网友:骨子里的高雅
  • 2021-04-04 22:22
ABAP SAP 如何将一个内表中的某一行分配给一个field-symbol
最佳答案
  • 五星知识达人网友:低血压的长颈鹿
  • 2021-04-04 22:52
1 你的思路不对。
2 loop里面嵌套loop未必慢,n小于10万的时候,性能差异可以不用考虑。
3 不用解决你的需求更简单~
^_^追问loop套loop我已经写出来了,我以为用fs会快一些所以想试试看
那什么情况下用fs快呢?追答loop + modify 时候用 可以省去modify动作,稍微快点。

不都是为了快的,更多的时候是为了简化代码,来实现一些“复杂”“重复性高”“动态编程”的需求的。

常见的应用,我列几个吧,我能想到的。

动态定义内表(比如不固定列数的ALV),动态的参数类型(程序运行时候才能确定具体type),矩阵转置(行列互转),增强的时候读取非传入传出参数的值(直接从内存读取)。
全部回答
  • 1楼网友:拜訪者
  • 2021-04-05 00:46
个人感觉这个算法比较没效率,另外想请问为什么要找出两行中某字段的相同的行,是为了用ABAP处理收集的数据吗?如果是这样的话loop里面套loop反而来的更有效率,因为你每两行进行比对的话,次数应该是(n!),你的思路实现起来反而复杂。再试试用loop来写吧,如果有什么问题你追问一下,我再看看。追问loop套loop我已经写出来了,我以为用会快一些所以想试试看
那什么情况下用快呢?追答其实我个人还暂时没太自己写过的,所以理解也不是很好,现在感觉是类似指针性质的,所以指针的一些优劣,应该也都有的。
  • 2楼网友:一叶十三刺
  • 2021-04-05 00:31
跟有没有表头没关系 习惯写有表头的 没表头的自己去写
ITAB是原始数据表
ITAB2是中转表
ITAB3是最后结果表
DATA: BEGIN OF ITAB OCCURS 0,
COL1 TYPE I,
COL2 TYPE I,
COL3 TYPE I,
FLAG TYPE CHAR1,
END OF ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 3.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 4.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 5.
APPEND ITAB.
ITAB-COL1 = 1.
ITAB-COL2 = 2 .
ITAB-COL3 = 5.
APPEND ITAB.
ITAB-COL1 = 3.
ITAB-COL2 = 2 .
ITAB-COL3 = 3.
APPEND ITAB.
DATA: ITAB2 LIKE TABLE OF ITAB WITH HEADER LINE.
DATA: ITAB3 LIKE TABLE OF ITAB WITH HEADER LINE.
LOOP AT ITAB.
READ TABLE ITAB2 WITH KEY COL1 = ITAB-COL1 COL2 = ITAB-COL2.
IF SY-SUBRC <> 0.
APPEND ITAB TO ITAB2.
ELSE.
APPEND ITAB TO ITAB3.
READ TABLE ITAB3 WITH KEY COL1 = ITAB-COL1 COL2 = ITAB-COL2 FLAG = 'X'.
IF SY-SUBRC <> 0.
ITAB2-FLAG = 'X'.
APPEND ITAB2 TO ITAB3.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT ITAB3.
WRITE:/ ITAB3-COL1, ITAB3-COL2, ITAB3-COL3.
ENDLOOP.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯