ABAP SAP 如何将一个内表中的某一行分配给一个field-symbol
一个内表itab1(没有表头)有n行m列我想找出重复的行(并非完全相同的行,而是其中有某两列相同就算其重复)我不想loop里面套loop这样太慢了我准备用field-sy...
一个内表itab1(没有表头)有n行m列 我想找出重复的行 (并非完全相同的行,而是其中有某两列相同就算其重复)
我不想loop里面套loop这样太慢了
我准备用field-symbol. 我设了两个field symbol 分别为<fs1>和<fs2>, 然后:
loop at itab assigning <fs1>.
<fs2>和<fs1>指向同一行 *
while <fs2>指向的不是itab的最后一行时 *
<fs2> 指当前<fs2>所指的下一行.*
if <fs1>和<fs2>中的某两项相同.将<fs1>和<fs2>移到另外一个内表itab2.endif.
endwhile.
endloop.
我感觉这样应该比用两个loop会快一些吧?
其中打星号的这几个语句我不知道怎么写,在abap里能实现吗?
或者有没有别的更好的办法? 求高手解答谢谢 展开
我不想loop里面套loop这样太慢了
我准备用field-symbol. 我设了两个field symbol 分别为<fs1>和<fs2>, 然后:
loop at itab assigning <fs1>.
<fs2>和<fs1>指向同一行 *
while <fs2>指向的不是itab的最后一行时 *
<fs2> 指当前<fs2>所指的下一行.*
if <fs1>和<fs2>中的某两项相同.将<fs1>和<fs2>移到另外一个内表itab2.endif.
endwhile.
endloop.
我感觉这样应该比用两个loop会快一些吧?
其中打星号的这几个语句我不知道怎么写,在abap里能实现吗?
或者有没有别的更好的办法? 求高手解答谢谢 展开
3个回答
展开全部
跟有没有表头没关系 习惯写有表头的 没表头的自己去写
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.
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.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人感觉这个算法比较没效率,另外想请问为什么要找出两行中某字段的相同的行,是为了用ABAP处理收集的数据吗?如果是这样的话loop里面套loop反而来的更有效率,因为你每两行进行比对的话,次数应该是(n!),你的思路实现起来反而复杂。再试试用loop来写吧,如果有什么问题你追问一下,我再看看。
追问
loop套loop我已经写出来了,我以为用会快一些所以想试试看
那什么情况下用快呢?
追答
其实我个人还暂时没太自己写过的,所以理解也不是很好,现在感觉是类似指针性质的,所以指针的一些优劣,应该也都有的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 你的思路不对。
2 loop里面嵌套loop未必慢,n小于10万的时候,性能差异可以不用考虑。
3 不用<FS>解决你的需求更简单~
^_^
2 loop里面嵌套loop未必慢,n小于10万的时候,性能差异可以不用考虑。
3 不用<FS>解决你的需求更简单~
^_^
追问
loop套loop我已经写出来了,我以为用fs会快一些所以想试试看
那什么情况下用fs快呢?
追答
loop + modify 时候用 可以省去modify动作,稍微快点。
用 不都是为了快的,更多的时候是为了简化代码,来实现一些“复杂”“重复性高”“动态编程”的需求的。
常见的应用,我列几个吧,我能想到的。
动态定义内表(比如不固定列数的ALV),动态的参数类型(程序运行时候才能确定具体type),矩阵转置(行列互转),增强的时候读取非传入传出参数的值(直接从内存读取)。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询