Loading...
Select Version
&pagelevel(3)&pagelevel
The following example shows a procedure to which all optimizations mentioned in the previous sections were applied. The optimized procedure (created by the “BS2000 Performance Controlling and Modelling” team) requires only 62% of the CPU time needed by the initial version of the procedure that was written using the lower performance syntax.
Optimized procedure (recommended syntax):
/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
Initial procedure (less recommended syntax):
/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