Tips and Tricks for the ABAP® Programming Language
Y9030019 – Helper macro for binary search demo
This report reads a text table. The columns 1-8 of each row will be used to create an internal table with a binary key. ZSUMME contains the count of idential keys.
ABAP™-Source-Code
You can copy and paste the source code directly into the ABAP™-Workbench.
REPORT Y9030019 LINE-SIZE 130. "Release 3.1G, 4.5A
************************************************************************
* Copyright (c) 1999 by CT-Team, 33415 Verl
* only use for CT-DEBUG_Simulator
* you can use or modify this report for your own work as long
* as you don't try to sell or republish it.
* in no event will the author be liable for indirect, special,
* Incidental, or consequental damages (if any) arising out of
* the use of this report.
*
************************************************************************
BREAK-POINT.
*//////////////////////////////////////////////////////////////////////*
MOVE: 'Read tables and use a VARTAB (DEFINE-Macro)'
TO SY-TITLE.
*//////////////////////////////////////////////////////////////////////*
*************** Externe Tabellen **********************
TABLES: YT100. "only use for CT-DEBUG_Simulator
*
DATA: HUGO(13) TYPE C.
*************** Makrodefinitionen **********************
DEFINE VARTAB.
DATA: BEGIN OF &1 OCCURS 0.
INCLUDE STRUCTURE &2.
DATA ZSUMME1(5) TYPE N.
DATA: END OF &1.
END-OF-DEFINITION.
*
DEFINE FILLTAB_BINARY.
&1 = YT100.
TRANSLATE &1 TO UPPER CASE.
READ TABLE &1 WITH KEY (HUGO) = &2+0(8) BINARY SEARCH.
CASE SY-SUBRC.
WHEN 0.
ADD 1 TO &1-ZSUMME1.
MODIFY &1 INDEX SY-TABIX.
WHEN 4.
ADD 1 TO &1-ZSUMME1.
INSERT &1 INDEX SY-TABIX.
WHEN 8.
ADD 1 TO &1-ZSUMME1.
APPEND &1.
ENDCASE.
END-OF-DEFINITION.
*
*//////////////////////////////////////////////////////////////////////*
************* Programmsteuerung *******************
*//////////////////////////////////////////////////////////////////////*
*
*
VARTAB IT100 YT100. "macro: global table
PERFORM READ-YT100.
*
PERFORM DISPLAY-IT100.
*
*//////////////////////////////////////////////////////////////////////*
************* Unterprogramme *******************
*//////////////////////////////////////////////////////////////////////*
************************************************************************
* Read and display a few rows of YT100
************************************************************************
FORM READ-YT100.
*
ULINE. SKIP 2.
WRITE: /5 'Step 1: Read YT100 and fill IT100 in binary mode' COLOR 5.
*.......................................................................
SELECT * FROM YT100
UP TO 70 ROWS
WHERE ZSPRSL EQ 'E'
AND ZARBGB GT 'Z20'.
*
MOVE 'ZTEXT1+0(8)' TO HUGO.
FILLTAB_BINARY IT100 IT100-ZTEXT1. "marco
*
ENDSELECT.
*
ENDFORM.
************************************************************************
* display internal table it100
************************************************************************
FORM DISPLAY-IT100.
*
ULINE. SKIP 2.
WRITE: /5 'Step 2: display it100, binary-key are byte 1-8 of ZTEXT1'.
SKIP 1.
*.......................................................................
WRITE: /1 'ZSPRSL',
8 'ZARBGB',
15 'ZMSGNR',
22 'ZSUMME',
29 'ZTEXT1'.
ULINE. SKIP.
*
LOOP AT IT100.
WRITE: /1 IT100-ZSPRSL,
8 IT100-ZARBGB,
15 IT100-ZMSGNR,
22 IT100-ZSUMME1,
29 IT100-ZTEXT1,
29 IT100-ZTEXT1+0(8) COLOR 3.
ENDLOOP.
*
ENDFORM.
************************************************************************
************************************************************************
******************* Programmende ***************************************
