onlyforbopi
3/8/2017 - 9:41 AM

ABAP LOOPING + LOOP CONTROL.

ABAP LOOPING + LOOP CONTROL.



***********************
* SY-INDEX HOLDS THE NUMBER OF ITERATIONS

DATA: 	counter3 TYPE I,
		multiple TYPE I VALUE 1.
		
DO 10 TIMES.
	counter = SY-INDEX.
	DO 10 TIMES.
		multiple = counter * SY-INDEX.
		WRITE: multiple.
	ENDDO.
	WRITE: /.

ENDDO.


ULINE.

***********************
* NESTED LOOPS

DATA: 	counter4 TYPE I,
		multiple1 TYPE I VALUE 1.
		
DO 10 TIMES.
	counter = SY-INDEX.
	DO counter TIMES.
		multiple1 = counter * SY-INDEX.
		WRITE: multiple1.
	ENDDO.
	WRITE: /.

ENDDO.
****************************************************
* while loop
ULINE.

DATA: a TYPE I. 
 
a = 0.
  
WHILE a <> 8.
  
   Write: / 'This is the line:', a.  
   a = a + 1.
   
ENDWHILE.
* FOR KNOWN AMOUNT OF REPETITIONS
* IF WE INITIALIZE COUNTER BEFORE AND INCREMENT IT INSIDE IT IS A FOR.
*
* Structure: 
* DO <var|number> TIMES.
*     <commands>
* ENDDO.

DO 10 TIMES.
	WRITE: / counter.
	counter = counter + 1.
ENDDO.
	
	
********************************************
* DO LOOP WITH CONDITIONAL

counter = 0.
DO 10 TIMES.
	WRITE: / counter.
	IF counter >= 7.
		charge = charge + ( counter * '9.56' ).
	ELSEIF counter >= 5.
		charge = charge + ( counter * '6.56' ).
	ELSEIF counter >= 3.
		charge = charge + ( counter * '3.56' ).
	ENDIF.
	
	counter = counter + 1.
ENDDO.
******************************************************
* nested while
ULINE.

DATA: b TYPE I,
      c TYPE I.
b = 10.
c = 0.

WHILE b <= 20.
    C = 0.
    WRITE:  b, 'smaller than 20', / .
    WHILE c <> 8.
      WRITE: / c, 'different than 8'.
      c = c + 1.
    ENDWHILE.
    b = b + 1.
ENDWHILE.
***********************
* NESTED LOOPS

DATA: 	counter3 TYPE I,
		multiple TYPE I VALUE 1.
		
DO 10 TIMES.
	counter = SY-INDEX.
	DO 10 TIMES.
		multiple = counter * SY-INDEX.
		WRITE: multiple.
	ENDDO.
	WRITE: /.

ENDDO.


ULINE.

***********************
* NESTED LOOPS

DATA: 	counter4 TYPE I,
		multiple1 TYPE I VALUE 1.
		
DO 10 TIMES.
	counter = SY-INDEX.
	DO counter TIMES.
		multiple1 = counter * SY-INDEX.
		WRITE: multiple1.
	ENDDO.
	WRITE: /.

ENDDO.
***********************************************************
* EXIT STATEMENT

.  
DO 5 TIMES.  
  IF SY-INDEX = 3.  
    EXIT.  
    ENDIF.  
    Write / SY-INDEX.  
ENDDO.
********************
* USE OF CONTINUE

DO 15 TIMES.
  " SY-INDEX keeps track of how many iterations we had.
  WRITE: / 'INSIDE LOOP SY-INDEX', SY-INDEX.
	counter = SY-INDEX MOD 3.
	WRITE: / counter.
ENDDO.

WRITE: / SY-INDEX.

ULINE.

DO 5 TIMES.
	IF SY-INDEX >= 3.
		CONTINUE.
	ENDIF.
	counter = SY-INDEX MOD 3.
	WRITE: / counter.
ENDDO.


ULINE.

DO 5 TIMES.
	counter = SY-INDEX MOD 3.
	WRITE: / counter.
	if counter = 0.
		CONTINUE.
	ENDIF.
ENDDO.


ULINE.


DO 5 TIMES.
	counter = SY-INDEX MOD 3.
	"WRITE: / counter.
	if counter = 0.
		CONTINUE.
	ENDIF.
  WRITE: SY-INDEX.
ENDDO.


ULINE.

DATA remainder TYPE i. 
DO 20 TIMES. 
  remainder = sy-index MOD 2. 
  IF remainder <> 0. 
     CONTINUE. 
  ENDIF. 
  WRITE / sy-index. 
ENDDO. 

ULINE.
1. simpledoloop.abap           : Shows a simple do / enddo loop.
2. simplewhileloop.abap        : Shows a simple while / endwhile loop.
3. syindex.abap                : Shows the use of sy-index in loops.
4. loopcontinue.abap           : Shows the use of the continue clause in loops.
5. loopcheck.abap              : Shows the use of the check clause in loops.
6. loopexit.abap               : Shows the use of the exit clause in loops.
7. nesteddo.abap               : Shows nested do loops
8. nestedwhile.abap            : Shows nested while loops
9. whiledo.abap                : Shows nested examples of while / do loops.

*****************************************************
* CHECK CONTROL LOOP

* CHECK statement terminates a loop pass based on a 
* condition. If the condition in the CHECK statement 
* is evaluated to false then all the remaining statements 
* in the statement block after the CHECK statement are 
* ignored, and the next loop pass starts. The condition 
* in the CHECK statement can be any logical expression.

*The syntax for check statement is −

*CHECK.
*Example
  
DO 5 TIMES.  
CHECK SY-INDEX BETWEEN 3 AND 4.  
Write / SY-INDEX.  
ENDDO.
**********************************************************
* NESTED WHILE WITH DO

ULINE.

b = 0.
c = 0.

WHILE b < 10.
  DO 5 TIMES.
    WRITE: c.
    c = c + 1.
  ENDDO.
  b = b + 1.
ENDWHILE.