该LOOP语句的输出是什么?

2020-08-15 16:10发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我遇到了以下代码,这让我感到困惑。 请看下面的代码:

数据:itab发生0的开始,
    字母TYPE C,
 Itab的结尾。

 itab-letter ='a'。
 附加itab。

 itab-letter ='b'。
 附加itab。

 itab-letter ='c'。
 附加itab。

 itab-letter ='d'。
 附加itab。

 在itab上。
   sy-tabix = 2。
   写Itab字母。
   出口。
 ENDLOOP。

在调试模式下运行此命令时,在到达循环之前,所有4个字母都附加在内部表itab中,并且SY-TABIX的值为4

当我们执行loop语句时,即使SY-TABIX的值为 2。它也应打印b。 为什么只打印一次。

2.jpg (52.7 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我遇到了以下代码,这让我感到困惑。 请看下面的代码:

数据:itab发生0的开始,
    字母TYPE C,
 Itab的结尾。

 itab-letter ='a'。
 附加itab。

 itab-letter ='b'。
 附加itab。

 itab-letter ='c'。
 附加itab。

 itab-letter ='d'。
 附加itab。

 在itab上。
   sy-tabix = 2。
   写Itab字母。
   出口。
 ENDLOOP。

在调试模式下运行此命令时,在到达循环之前,所有4个字母都附加在内部表itab中,并且SY-TABIX的值为4

当我们执行loop语句时,即使SY-TABIX的值为 2。它也应打印b。 为什么只打印一次。

2.jpg (52.7 kB)
付费偷看设置
发送
4条回答
悠然的二货
1楼 · 2020-08-15 16:46.采纳回答

您好 HS

SY-TABIX在循环前为4,因为字母D被添加到了 内部表的第四行(如 APPEND SAP帮助中所述)。

SY-TABIX在LOOP中为2,因为将其设置为2(LOOP开始后的第一行代码)。

在LOOP结束于第一条记录之后,由于 退出关键字。 这也是为什么只在结果中打印字母A的原因。

亲切的问候,
Mateusz
骆驼绵羊
2楼-- · 2020-08-15 16:42

hi HS

您做错了。

*如果您只想打印" b",那么您的代码应该像这样。

在itab上循环播放。
   如果sy-tabix = 2。
   写Itab字母。
   出口。  "要获得更好的性能,就必须要有
   万一。
 ENDLOOP。

*如果只想打印" a"和" b"。 然后

在itab上循环播放。

   如果sy-tabix <= 2。
   写Itab字母。
   万一。

 结局。
 

*如果要写入存储在" itab"中的所有字母,请使用此代码。

在itab上循环播放。

   写Itab字母。

 ENDLOOP。

谢谢。

Navneet

compass1988
3楼-- · 2020-08-15 16:54

SY-TABIX只是有关最后访问的行的信息(未为所有操作设置,请参阅每个语句的ABAP帮助以查看是否已设置) )。

更改SY-TABIX不允许您访问内部表的另一行,更改SY-TABIX时变量(在您的情况下为ITAB)不会更改。

无论如何,您不得更改SYstem字段的值(尽管允许)。 它是 SAP官方职位

< pre>除了一个字段(sy-repid)外,系统字段是变量,但是 但是,它们仅应用于读取,因为否则很重要 用于执行后续程序的信息可能会丢失。 系统 ABAP程序中的字段只能在极少数情况下被覆盖,以控制 系统行为。
独立观察员
4楼-- · 2020-08-15 16:41

HS

SY-TABIX 是一个系统字段,其中包含正在处理的行号。

如果您从程序的开头开始在调试器中跟踪SY-TABIX的值,则在每个append语句中其值将增加1。 在这里,由于您添加了4个条目,因此循环前的值为4。

循环开始后,进程处的行号将为1,因为它已开始处理表的第一行项目。

根据 Sandra Rossi 的正确建议,您不应更改这些系统字段的值。

在进入解决方案之前,让我解释一下该程序作为循环的一部分正在做的事情:

如下图所示,在内部表上循环播放,请按照以下说明了解功能 。

关于您的问题:"当我们遍历loop语句时,为什么退出循环 即使仅在SY-TABIX的值为2时运行一次,它也应该打印b。为什么只打印一次。"

上面的解释也回答了您上面提到的问题。

如果您希望程序仅打印前2个条目并退出,则您的程序应如下所示,请确保 您的WRITE语句位于EXIT命令之前。

数据:itab开头为0,
         字母TYPE C,
       Itab的结尾。

 itab-letter ='a'。
 附加itab。

 itab-letter ='b'。
 附加itab。

 itab-letter ='c'。
 附加itab。

 itab-letter ='d'。
 附加itab。

 在itab上。
   写Itab字母。  *注意您的Write语句必须在EXIT命令之前。
   如果sy-tabix = 2。
     出口。
   万一。
 ENDLOOP。

希望您现在一切都清楚了。

致谢!

一周热门 更多>