• 循環命令構文


    ループの中では、1 つの命令ブロックが連続して複数回実行されます。ABAP には 4 種類のループがあります。

    ● DO 命令を使用した無条件ループ
    ● WHILE 命令を使用した条件ループ
    ● LOOP 命令を使用した、内部テーブルおよび抽出データセットに対するループ

    無条件ループ
    1 つの命令ブロックを無条件で複数回処理するには、以下の制御構造を使用します。

    DO [n TIMES] ...
     [statement_block]
    ENDDO.


    ループパスの数を n に限定するには TIMES オプションを使用します。
    何もオプションを指定しない場合は、EXIT または STOP などの強制終了命令に到達するまで命令ブロックは繰り返して実行されます (下記参照)。システム項目 sy-index には、現在のループパスを含めたループパスの数が含まれます。
    DO ループをネストしたり、他のループ形式と組合せたりすることができます。
    DOループの単純な例

    DO.
     WRITE sy-index.
     IF sy-index = 3.
      EXIT.
     ENDIF.
    ENDDO.


    一覧出力は以下のとおりです。

    1 2 3

    このループは 3 回処理されます。ここでループは 3 回処理され、EXIT 命令により終了します。
    TIMES オプションを使用したループを 2 つネストした例

    DO 2 TIMES.
     WRITE sy-index.
     SKIP.
     DO 3 TIMES.
      WRITE sy-index.
     ENDDO.
     SKIP.
    ENDDO.

    一覧出力は以下のとおりです。

    1
    1 2 3
    2
    1 2 3


    外側のループは 2 回処理されます。外側のループが 1 回処理されると、内側のループは 3 回処理されます。システム項目 sy-index には、それぞれのループのループパスの数が個別に含まれることに注意してください。
    条件ループ
    一定の条件が真である間に命令ブロックを繰り返すには、以下の制御構造を使用します。

    WHILE log_exp 
      [statemaent_block]
    ENDWHILE.


    log_exp として任意の論理式を使用することができます。WHILE と ENDWHILE の間の命令ブロックは、条件が真である間、または EXIT または STOP などの強制終了命令が出現するまでの間繰り返されます。システム項目 sy-index には、現在のループパスを含めたループパスの数が含まれます。
    任意の深さまで WHILE ループをネストしたり、他のループ形式と組合せたりすることができます。

    REPORT demo_flow_control_while.
    DATA: length TYPE i VALUE 0,
    strl TYPE i VALUE 0,
    string(30) TYPE c VALUE 'Test String'.
    strl = strlen( string ). WHILE string NE space. WRITE string(1). length = sy-index. SHIFT string. ENDWHILE. WRITE: / 'STRLEN: ', strl. WRITE: / 'Length of string:', length.


    以下のように出力されます。

    T e s t S t r i n g
    STRLEN: 11
    Length of String: 11


    ここでは、文字列の長さを判別するために WHILE ループを使用しています。そのために、ループが処理されるたびに文字列を 1 文字分左へとシフトし、空白のみが含まれるようになるまでそれを続けます。この例は WHILE 命令を説明するために選択されています。もちろん、関数 strlen を使用した方が簡単かつ効率的に文字列の長さを判別することができます。

    *10回ループして処理を抜ける
    DATA: V_CNT TYPE I.
    Do.
      V_CNT = V_CNT + 1.
      WRITE V_CNT.
    
      IF V_CNT >= 10.
        EXIT.
      ENDIF.
    ENDDO.
    
    *結果は12345678910となるだろう。
    
    
    *5回ループして処理を抜ける
    Do 5 TIMES.
      V_CNT = V_CNT + 1.
      WRITE V_CNT.
    
      IF V_CNT >= 10.
        EXIT.
      ENDIF.
    ENDDO.
    

      

    *結果は12345となるだろう。
    *あらかじめ決められた回数分ループするのか、条件に一致するまでループする等いくつかの構文が存在。

  • 相关阅读:
    Asp.Net WebService 使用后来管理系统对接口方法进行公开控制
    ASP.NET使用NPOI加载Excel模板并导出下载
    VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案
    ASP.NET中Session简单原理图
    三层架构学习总结图
    备忘录
    帶編號漏洞列表
    pwn with glibc heap(堆利用手册)
    基于qemu和unicorn的Fuzz技术分析
    winafl 源码分析
  • 原文地址:https://www.cnblogs.com/yjyongil/p/10487873.html
Copyright © 2020-2023  润新知