This is a test message to test the length of the message box.
Login
ABAP Step
Erstellt von Software-Heroes

ABAP - Step

290

Heute einmal ein neuer Zusatz für die Schleifen und wie du ihn verwenden kannst. Mit Step hast du die Möglichkeiten Schritte in einer Schleife zu überspringen.

Werbung


Heute mal eine Erweiterung von verschiedenen Ausdrücken in ABAP um eine Schrittgröße und Reihenfolge zu beeinflussen. Step gilt nicht nur für ein Statement, sondern funktioniert nun mittlerweile für mehrere Ausdrücke in ABAP. In diesem Artikel werden wir auf einige Regeln eingehen. Die neuen Statements sind ab ABAP 7.56 möglich oder S/4 HANA 2021.

 

Vorbereitung

Für unsere Beispiele befüllen wir noch entsprechend Tabellen und bereiten die Daten vor, um sie in den Beispielen nutzen zu können. Dabei befüllen wir die Tabelle mit einer einfachen DO Schleife mit den Zahlen 1 bis 20.

DO 20 TIMES.
  INSERT sy-index INTO TABLE mt_data.
ENDDO.

 

Loop

Im Artikel werden wir vor allem auf die einfache Schleife mit LOOP eingehen, da es hier einige Besonderheiten zu beachten gilt. Wird der STEP nicht angegeben bei einem Loop, dann steht dieser auf 1 als Standardwert, das heißt wir Loopen nach vorn mit einer Schrittlänge von 1. Der Step kann niemals auf 0 stehen, da dies keinen Sinn machen würde und der Compiler dies sofort als Fehler ausgeben würde.

 

Vorwärts

Geben wir nun einen positiven Wert von 2 an und geben in der Schleife die Zahlen aus, die in der Schleife verarbeitet werden:

io_out->write( 'Loop with Step 2' ).

LOOP AT mt_data INTO DATA(ld_data) STEP 2.
  io_out->write( |{ ld_data }| ).
ENDLOOP.

 

Die Ausgabe der Schleife sieht nun wie folgt aus:

 

Rückwärts

Im nächsten Loop geben wir nun einen negative Schrittweite von -3 an und geben das Ergebnis wieder in die Console aus:

io_out->write( 'Loop with Step -3' ).

LOOP AT mt_data INTO DATA(ld_data) STEP -3.
  io_out->write( |{ ld_data }| ).
ENDLOOP.

 

Die Consolenausgabe sieht nun wie folgt aus, dabei beginnt der Loop mit dem ersten Eintrag von hinten:

 

WHERE

Im nächsten Schritt kombinieren wir den Step mit der Where Bedingung beim Loop. Dabei kann hier nur ein Step von 1 oder -1 angegeben werden, etwas anderes führt beim Compiler zu einer Fehlermeldung. Entsprechend würden wir über das eingegrenzte Ergebnis, entweder vorwärts oder rückwärts iterieren.

io_out->write( 'Loop with Where' ).

LOOP AT mt_data INTO DATA(ld_data) STEP -1 WHERE table_line >= 10 AND table_line <= 15.
  io_out->write( |{ ld_data }| ).
ENDLOOP.

 

Das Ergebnis nach Abgrenzung und Loop sieht nun wie folgt aus:

 

FROM/TO

Das letzte Beispiel bezieht sich auf die Abgrenzung über den Index mit FROM und TO. Dabei ist zu beachten, wenn ein Bereich mit beiden Statements abgegrenzt wird, dass die Reihenfolge von/bis sich ändert, wenn eine negative Schrittweite verwendet wird. Im folgenden Beispiel beginnen wir bei 5 und gehen rückwärts bis 1 (nicht angegeben).

io_out->write( 'Loop with From/To' ).

LOOP AT mt_data INTO DATA(ld_data) FROM 5 STEP -2.
  io_out->write( |{ ld_data }| ).
ENDLOOP.

 

Dazu noch das entsprechende Ergebnis der Console nach dem Loop:

 

Vollständiges Beispiel

An dieser Stelle noch einmal das vollständige Beispiel in Form einer ausführbaren Klasse zum Kopieren oder Lesen:

CLASS zcl_bs_demo_loop_step DEFINITION PUBLIC FINAL CREATE PUBLIC.
  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

    TYPES:
      tt_int TYPE STANDARD TABLE OF i WITH EMPTY KEY.

    DATA:
      mt_data TYPE tt_int.

  PROTECTED SECTION.
  PRIVATE SECTION.
    METHODS:
      prepare_table_with_data,

      loop_forward
        IMPORTING
          io_out TYPE REF TO if_oo_adt_classrun_out,

      loop_backward
        IMPORTING
          io_out TYPE REF TO if_oo_adt_classrun_out,

      loop_with_where
        IMPORTING
          io_out TYPE REF TO if_oo_adt_classrun_out,

      loop_with_from_to
        IMPORTING
          io_out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.


CLASS zcl_bs_demo_loop_step IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    prepare_table_with_data( ).

    loop_forward( out ).
    out->write( '*****' ).

    loop_backward( out ).
    out->write( '*****' ).

    loop_with_where( out ).
    out->write( '*****' ).

    loop_with_from_to( out ).
    out->write( '*****' ).
  ENDMETHOD.


  METHOD prepare_table_with_data.
    DO 20 TIMES.
      INSERT sy-index INTO TABLE mt_data.
    ENDDO.
  ENDMETHOD.


  METHOD loop_forward.
    io_out->write( 'Loop with Step 2' ).

    LOOP AT mt_data INTO DATA(ld_data) STEP 2.
      io_out->write( |{ ld_data }| ).
    ENDLOOP.
  ENDMETHOD.


  METHOD loop_backward.
    io_out->write( 'Loop with Step -3' ).

    LOOP AT mt_data INTO DATA(ld_data) STEP -3.
      io_out->write( |{ ld_data }| ).
    ENDLOOP.
  ENDMETHOD.


  METHOD loop_with_where.
    io_out->write( 'Loop with Where' ).

    LOOP AT mt_data INTO DATA(ld_data) STEP -1 WHERE table_line >= 10 AND table_line <= 15.
      io_out->write( |{ ld_data }| ).
    ENDLOOP.
  ENDMETHOD.


  METHOD loop_with_from_to.
    io_out->write( 'Loop with From/To' ).

    LOOP AT mt_data INTO DATA(ld_data) FROM 5 STEP -2.
      io_out->write( |{ ld_data }| ).
    ENDLOOP.
  ENDMETHOD.
ENDCLASS.

 

Fazit

Inwieweit die neue Erweiterung der Ausdrücke Sinn macht, darüber kann man sich sicherlich streiten. Doch am Ende erhalten wir weiter Möglichkeiten, die es auch schon in anderen Sprachen gibt und es erweitert das Spektrum in der Sprache ABAP.


Enthaltene Themen:
Modernes ABAPSTEPLoop
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ABAP - XCO Class Runner

Kategorie - ABAP

Wie sieht es mit der Ausführung von ABAP Klassen im Bereich von XCO aus? Schauen wir uns dazu den Class Runner genauer an.

04.02.2025

ABAP - XCO UUID

Kategorie - ABAP

Wie generierst du mit den XCO Klassen eindeutige IDs in ABAP? In diesem Artikel erfährst du, wie schnell und einfach das möglich ist.

28.01.2025

ABAP - XCO Systemfelder

Kategorie - ABAP

Gibt es für SY bzw. SYST auch eine Alternative in der XCO Bibliothek in ABAP Cloud? Einen Blick ist sie auf jeden Fall wert.

24.01.2025

ABAP - XCO Excel

Kategorie - ABAP

Was kann eigentlich die XCO Bibliothek für Excel in ABAP? Hier schauen wir uns den aktuellen Stand der API an.

29.11.2024

ABAP - XCO Strings

Kategorie - ABAP

In diesem Artikel schauen wir uns die XCO Klasse zur Erzeugung und Verarbeitung von Strings für ABAP Cloud an und vergleichen sie mit den klassischen Statements.

22.11.2024