Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Beispiel einer optimierten Prozedur

&pagelevel(3)&pagelevel

Das folgende Beispiel zeigt eine Prozedur, in der alle Optimierungsmaßnahmen aus den vorangegangenen Abschnitten angewendet wurden. Die optimierte Prozedur (erstellt vom Team „BS2000 Performance Controlling and Modelling“) benötigt nur noch 62% der CPU-Zeit gegenüber der Ausgangsprozedur, die in weniger performanter Schreibweise erstellt war.

Optimierte Prozedur (empfohlene Schreibweise):

/SET-PROCEDURE-OPTIONS
/
/OPEN-VARIABLE-CONTAINER CONTAINER-NAME=CONTFS, -
/                        FROM-FILE=*LIBRARY-ELEMENT(LIBRARY=BAD.LIB)
/DECLARE-VARIABLE VARIABLE-NAME=C-FS-L(TYPE=*STRUCTURE) - 
/               , MULTIPLE-ELEMENTS=*LIST, CONTAINER=CONTFS
/
/&* The list variables and the output of show-file-attr
/ DECLARE-VARIABLE VARIABLE-NAME = ( -
/         LIST   ( TYPE = *STRING    ), -
/         TSIL   ( TYPE = *STRING    ), -
/         FS-OUT ( TYPE = *STRUCTURE ), -
/         ), MULTIPLE-ELEMENTS=*LIST
/
/&* List initialization
/ LIST = *STRING-TO-VAR ( '(ABC,DEF,GHI,JKL,MNO,ABC,DEF,GHI,JKL,MNO)' )
/
/&* List in reverse order
/ FOR I = *LIST(LIST)
/   TSIL = I, *PREFIX
/ END-FOR
/
/&* Show list variable in one command
/ SHOW-VARIABLE VARIABLE-NAME = ( LIST, TSIL )
/
/&* Search variable A inside LIST and save the result in B
/ A = 'I'
/ IND = SEARCH-LIST-INDEX('LIST', '^&A.$', PATTERN-TYPE=*REGULAR-EXPRESSION)
/ IF ( IND <> 0 )
/  B = LIST#IND
/ END-IF
/
/&* Get all files beginning with 'A'
/ EXECUTE-CMD CMD = (/SHOW-FILE-ATTRIBUTES A*) -
/           , STRUCTURE-OUTPUT = FS-OUT -
/           , TEXT-OUTPUT = *NONE
/
/&* Put contents in a container
/ C-FS-L = FS-OUT
/
/&* Calculate total size
/ TSIZE = 0
/ FOR I = *COUNTER( 1, SIZE('FS-OUT'), 1 )
/   TSIZE = TSIZE + FS-OUT#I.F-SIZE
/ END-FOR
/
/&* Save container ( close implicit at procedure end )
/ SAVE-VARIABLE-CONTAINER CONTAINER-NAME = CONTFS
/
/&* Display date, time and total file size
/ WRITE-TEXT -
/   'Today &(DATE()) at &(TIME()) we have a total file size of &TSIZE -
/    on user-id &(USER-ID())..'
/
/EXIT-PROCEDURE

Ausgangsprozedur (weniger empfohlene Schreibweise):

/SET-PROC-OPT
/
/OP-VAR-CONT CONTFS, *L(BAD.LIB)
/DECL-VAR C-FS-L,TYP=STRUCT,MULT=*L,CONT=CONTFS
/
/REMARK  This list variable
/ DECL-VAR LIST ( TYP = STRI ),MULT=*L
/
/REMARK  Its initialization
/ SET-VAR LIST ='ABC', *EXTEND; SET-VAR LIST ='DEF', *EXTEND
/ SET-VAR LIST ='GHI', *EXTEND; SET-VAR LIST ='JKL', *EXTEND
/ SET-VAR LIST ='MNO', *EXTEND; SET-VAR LIST ='ABC', *EXTEND
/ SET-VAR LIST ='DEF', *EXTEND; SET-VAR LIST ='GHI', *EXTEND
/ SET-VAR LIST ='JKL', *EXTEND; SET-VAR LIST ='MNO', *EXTEND
/
/REMARK  List in reverse order
/ DECL-VAR TSIL (TYP=STRI), MULT=*L
/
/ FOR I = *C( SIZE('LIST'), 1, -1)
/   SET-VAR TSIL#&(SIZE('LIST') - I + 1) = LIST#&I
/ END-F
/
/REMARK  Show list variable
/ SH-VAR LIST
/ SH-VAR TSIL
/
/REMARK  Search variable A inside LIST
/ SET-VAR A = 'I'
/ SET-VAR FOUND = FALSE
/ FOR I=*C(1,SIZE('LIST'),1), COND=(NOT FOUND)
/  IF ( LIST#&I == A ) 
/    SET-VAR FOUND = TRUE
/  EN-IF
/ END-F
/
/REMARK  Save it in B
/ IF ( FOUND )
/   SET-VAR B = LIST#&I
/ EN-IF
/
/REMARK  Get all file beginning with 'A'
/ DECL-V FS-OUT ,TYP=STRU,MULT=*L
/ EXEC-CMD (/SH-FIL-ATTR A*),STR-OUTPUT=FS-OUT,TEXT-OUT=*NONE
/
/REMARK  Calculate total size and put contents in a container
/ SET-VAR TSIZE = 0
/ FOR I=*C(1,SIZE('FS-OUT'),1)
/  SET-VAR TSIZE = TSIZE + FS-OUT#&I..F-SIZE
/  SET-VAR C-FS-L#&I = FS-OUT#&I
/ END-F
/
/REMARK  Save the container
/ SAVE-VAR-CONT CONTFS
/
/REMARK  Close the container
/ CLOSE-VAR-C CONTFS
/
/REMARK Display date, time and total file size
/ TDATE = DATE
/ TTIME = TIME
/ 
/W-T 'Today (&TDATE) at &TTIME we have a total file size of &TSIZE -
/     on user-id &USER-ID..'
/
/EXIT-PROC