I have some of the VSAM files listed in a dataset as records.
I would want to read them one by one and pull only the allocation details (space-units, space-allocated, space-used) of each of the VSAM dataset and
finally place them onto a dataset. The final dataset/output should like something like this –
Hi,
You can simple read the input dataset records to a variable and use a smple Loop to extract the information for the datasets, finally display or write them to a output qsam file,
here i provide a sample,it may be useful.
EXTRACT_DSN_INFO:
/* THIS FUNCTION WOULD EXTRACT THE NECCESSARY INFORMATION FROM */
/* OUTPUT OF LISTCAT COMMAND AND SAVE THEM IN NECCESARY ARRAYS */
/* DSN CAT OWNER VOLSER */
DO I=1 TO LINE.0
SELECT
WHEN SUBSTR(LINE.I, 2, 08) = 'NONVSAM' THEN
DO
IDX=IDX+1
DSN.IDX = STRIP(SUBSTR(LINE.I, 18, 40))
END
WHEN SUBSTR(LINE.I, 2, 11) = ' IN-CAT' THEN
DO
CAT.IDX = STRIP(SUBSTR(LINE.I, 17, 40))
END
/** WHEN SUBSTR(LINE.I, 31, 25) = 'LISTING FROM CATALOG -- ' THEN
DO
CAT = STRIP(SUBSTR(SORTDSN.I, 55, 45))
END **/
WHEN SUBSTR(LINE.I, 2, 20) = ' DATASET-OWNER' THEN
DO
OWNER.IDX = STRIP(SUBSTR(LINE.I, 27,8))
CRE.IDX = STRIP(SUBSTR(LINE.I, 54, 10))
END
WHEN SUBSTR(LINE.I, 2, 14) = ' RELEASE' THEN
DO
p F3=Exit F5=Rfind F6=Rchange F12=Cancel
EXTRACT_DSN_INFO:
/* THIS FUNCTION WOULD EXTRACT THE NECCESSARY INFORMATION FROM */
/* OUTPUT OF LISTCAT COMMAND AND SAVE THEM IN NECCESARY ARRAYS */
/* DSN CAT OWNER VOLSER */
DO I=1 TO LINE.0
SELECT
WHEN SUBSTR(LINE.I, 2, 08) = 'NONVSAM' THEN
DO
IDX=IDX+1
DSN.IDX = STRIP(SUBSTR(LINE.I, 18, 40))
END
WHEN SUBSTR(LINE.I, 2, 11) = ' IN-CAT' THEN
DO
CAT.IDX = STRIP(SUBSTR(LINE.I, 17, 40))
END
/** WHEN SUBSTR(LINE.I, 31, 25) = 'LISTING FROM CATALOG -- ' THEN
DO
CAT = STRIP(SUBSTR(SORTDSN.I, 55, 45))
END **/
WHEN SUBSTR(LINE.I, 2, 20) = ' DATASET-OWNER' THEN
DO
OWNER.IDX = STRIP(SUBSTR(LINE.I, 27,8))
CRE.IDX = STRIP(SUBSTR(LINE.I, 54, 10))
END
WHEN SUBSTR(LINE.I, 2, 14) = ' RELEASE' THEN
DO
/* NOT NEEDED*/
END
WHEN SUBSTR(LINE.I, 3,12) = ' VOLSER' THEN
DO
VOLSER.IDX=STRIP(SUBSTR(LINE.I, 27,9))
END
OTHERWISE
DO
/* SAY LINE.I */
END
END /* OF SELECT */
END /* DO */
RETURN
/*************************************************************/
WRITE_OUTPUT_TO_JCL:
DO I=1 TO IDX
/*SAY DSN.I ||" "||CAT.I||" "||OWNER.I||" "||VOLSER.I*/
TMP.I=DSN.I ||COPIES(' ', 45-LENGTH(DSN.I))||" " ||VOLSER.I ||,
COPIES(' ', 10-LENGTH(VOLSER.I))||" "||CRE.I
END
/*"EXECIO * DISKW OUTDD (STEM TMP. FINIS"*/
SAY "OUTPUT SUCCESSFULLY WRITEN TO TEMP DD IN JCL ..."
RETURN