Joined: 26 Nov 2002 Posts: 12403 Topics: 75 Location: San Jose
Posted: Wed Jan 11, 2006 1:23 pm Post subject:
Quote:
If i am reading record starting from the first and storing the key in input-key,so the key becomes ABPQRSPAL and we are checking the input-key with ws-prev-key which does not have any value and the condition will fail so,i am not able to get what exactly summation of table values means.
*sigh* In the beginning of the program itself you will read the record and move to contents to the ws-prev-key. So when you get to the main processing , you already have the key.
Code:
procedure division
Perform 1000-initilization
perform 2000-main-process until end-of-file
goback
.
1000-initialization.
open files
perform read-input-file
move input-key to w-prev-key
move input-key to table-rec (1)
2000-main-process.
if input-key = ws-prev-key
populate the marks in the array
else
perform the summation of the table values
load the table with new key
move input-key to ws-prev-key
end-if
perform read-para
Once the key changes you will perform the summation from your internal table. Once you are done with it you will initialize the internal table and load it with your new key.
I have coded the pgm and the results of my program are shown below and i am unable to get the desired results and i am mentioning the problem which i have got.Morever can you please suggest me what i have coded is an efficient method i have used.
Secondly ,the tests in my input dataset are presently having values 1,2 and 3 and that is why i have COL1 ,COL2 ,COL3 .Can the program be modified to take care of any test values in the future say for example the TEST values can be 1,2,3,4,5,6,7,8,9,10 correspondingly COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10.As my unload from the DB2 table might result different values of TEST ,i need to take care for the TEST values as a generic not to what i have coded for only three values 1,2 and 3 .Please guide me further to proceed as i am unable to go further.
Code:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INPUT-FILE ASSIGN TO INFILE
FILE STATUS IS INPUT-FILE-STATUS.
SELECT REPORT-FILE ASSIGN TO RPTFILE
FILE STATUS IS REPORT-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD INPUT-FILE
RECORDING MODE IS F
BLOCK CONTAINS 0 CHARACTERS
DATA RECORD IS INPUT-REC.
******************************************************************
* INTERNAL TABLE USED FOR STORING DATA READ FROM INPUT FILE *
******************************************************************
01 T-INTERNAL-TABLE-AREA.
05 WS-IN-CNT PIC S9(04) COMP VALUE 0.
05 WS-IN-MAX PIC S9(04) COMP VALUE 1000.
05 INTERNAL-TABLE OCCURS 1000 TIMES
INDEXED BY WS-INDEX.
10 T-KEY.
15 T-DIV PIC X(02).
15 T-HOME PIC X(04).
15 T-DEPT PIC X(04).
15 T-NO PIC X(04).
10 T-RUNNO PIC 9(01).
10 T-SUM-COL1 PIC 9(02).
******************************************************************
* REPORT HEADER LINES *
******************************************************************
01 REPORT-DTL-HDR1.
05 CC PIC X.
05 FILLER PIC X(04) VALUE 'DIV '.
05 FILLER PIC X(04) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'HOME '.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE 'DEPT'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(02) VALUE 'NO'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'STATUS'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE 'COL1'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE 'COL2'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE 'COL3'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'TOTAL'.
05 FILLER PIC X(56) VALUE SPACES.
01 REPORT-DTL-HDR2.
05 CC PIC X.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(04) VALUE '----'.
05 FILLER PIC X(56) VALUE SPACES.
01 REPORT-BLANK-LINE.
10 CC PIC X(01) VALUE SPACES.
10 FILLER PIC X(132) VALUE SPACES.
PROCEDURE DIVISION.
******************************************************************
* *
* P R O C E D U R E D I V I S I O N *
* *
******************************************************************
000-MAINLINE.
******************************************************************
* THIS PROCEDURE CONTROLS MAIN PROCESSING OF THE PROGRAM. *
******************************************************************
******************************************************************
* THIS PARAGRAPH PERFORMS ALL NECESSARY HOUSEKEEPING *
* WORK.THIS INCLUDES INITIALIZING WORKING-STORAGE VARIABLES *
* AND OPENING FILES REQUIRED FOR PROGRAM PROCESSING. *
******************************************************************
100-STARTUP.
OPEN INPUT INPUT-FILE.
EVALUATE INPUT-FILE-STATUS
WHEN '00'
CONTINUE
WHEN OTHER
DISPLAY '*********** ERROR *******************'
MOVE '100:OPEN FAILED FOR INPUT-FILE' TO ABEND-MSG
MOVE INPUT-FILE-STATUS TO ABEND-STATUS
DISPLAY "*********** ERROR *******************"
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-EVALUATE.
OPEN OUTPUT REPORT-FILE.
EVALUATE REPORT-FILE-STATUS
WHEN '00'
CONTINUE
WHEN OTHER
DISPLAY '*********** ERROR *******************'
MOVE '100 :OPEN FAILED FOR REPORT FILE' TO ABEND-MSG
MOVE REPORT-FILE-STATUS TO ABEND-STATUS
DISPLAY '*********** ERROR *******************'
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-EVALUATE.
INITIALIZE WS-TOTALS.
INITIALIZE CURRENT-KEY.
WRITE REPORT-LINE FROM REPORT-DTL-HDR1.
WRITE REPORT-LINE FROM REPORT-DTL-HDR2.
100-STARTUP-EXIT.
EXIT.
130-READ-INPUT-FILE.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 400-PROCESS-DATA *
******************************************************************
INITIALIZE INPUT-REC.
READ INPUT-FILE
AT END
SET INPUT-EOF TO TRUE
NOT AT END
IF INPUT-FILE-STATUS IS EQUAL TO '00'
ADD 1 TO WS-IN-CNT
CONTINUE
ELSE
MOVE '130:READ FAILED FOR INPUT FILE' TO ABEND-MSG
MOVE INPUT-FILE-STATUS TO ABEND-STATUS
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-IF
END-READ.
MOVE DIV TO INPUT-DIV.
MOVE HOME TO INPUT-HOME.
MOVE DEPT TO INPUT-DEPT.
MOVE NO TO INPUT-ETVNO.
130-READ-INPUT-FILE-EXIT.
EXIT.
400-PROCESS-DATA.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 000-MAINLINE *
******************************************************************
SET INPUT-NOT-EOF TO TRUE.
SET WS-INDEX TO 1.
PERFORM 130-READ-INPUT-FILE THRU 130-READ-INPUT-FILE-EXIT.
MOVE INPUT-KEY TO WS-PREV-KEY.
MOVE INPUT-KEY TO T-KEY(WS-INDEX).
PERFORM UNTIL INPUT-EOF
IF INPUT-KEY = WS-PREV-KEY
MOVE STATUS TO A
MOVE TEST TO T-RUNNO(WS-INDEX)
MOVE SUM-COL1 TO T-SUM-COL1(WS-INDEX)
ELSE
COMPUTE WS-TOTAL = FUNCTION SUM(T-SUM-COL1(ALL))
PERFORM WRITE-PARA
INITIALIZE WS-TOTAL T-INTERNAL-TABLE-AREA
SET WS-INDEX TO 1
MOVE DIV TO INPUT-DIV
MOVE HOME TO INPUT-HOME
MOVE DEPT TO INPUT-DEPT
MOVE NO TO INPUT-ETVNO
MOVE INPUT-KEY TO T-KEY(WS-INDEX)
MOVE TEST TO T-RUNNO(WS-INDEX)
MOVE SUM-COL1 TO T-SUM-COL1(WS-INDEX)
MOVE INPUT-KEY TO WS-PREV-KEY
END-IF
SET WS-INDEX UP BY 1
PERFORM 130-READ-INPUT-FILE THRU 130-READ-INPUT-FILE-EXIT
END-PERFORM.
COMPUTE WS-TOTAL = FUNCTION SUM(T-SUM-COL1(ALL))
PERFORM WRITE-PARA.
WRITE REPORT-LINE FROM REPORT-BLANK-LINE.
PERFORM 450-CHECK-REPORT-IO THRU 450-CHECK-REPORT-IO-EXIT.
PERFORM TOTAL-PARA.
400-PROCESS-DATA-EXIT.
EXIT.
WRITE-PARA.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 400-PROCESS *
******************************************************************
INITIALIZE REPORT-REC.
MOVE WS-PREV-KEY(1:2) TO R-DIV.
MOVE WS-PREV-KEY(3:4) TO R-HOME.
MOVE WS-PREV-KEY(7:4) TO R-DEPT.
MOVE WS-PREV-KEY(11:5) TO R-NO.
MOVE A TO R-STATUS.
IF T-RUNNO(1) = 1
MOVE T-SUM-COL1(1) TO R-SUM-COL1
COMPUTE T-SUM-COL1-TOTAL = T-SUM-COL1-TOTAL +
T-SUM-COL1(1)
END-IF.
IF T-RUNNO(2) = 2
MOVE T-SUM-COL1(2) TO R-SUM-COL2
COMPUTE T-SUM-COL2-TOTAL = T-SUM-COL2-TOTAL +
T-SUM-COL1(2)
END-IF.
IF T-RUNNO(3) = 3
MOVE T-SUM-COL1(3) TO R-SUM-COL3
COMPUTE T-SUM-COL3-TOTAL = T-SUM-COL3-TOTAL +
T-SUM-COL1(3)
END-IF.
EVALUATE TRUE
WHEN T-RUNNO(1) = 2
MOVE T-SUM-COL1(1) TO R-SUM-COL2
COMPUTE T-SUM-COL2-TOTAL = T-SUM-COL2-TOTAL +
T-SUM-COL1(2)
IF T-RUNNO(2) = 3
MOVE T-SUM-COL1(1) TO R-SUM-COL3
COMPUTE T-SUM-COL3-TOTAL = T-SUM-COL3-TOTAL +
T-SUM-COL1(3)
END-IF
WHEN T-RUNNO(1) = 3
MOVE T-SUM-COL1(1) TO R-SUM-COL3
COMPUTE T-SUM-COL3-TOTAL = T-SUM-COL3-TOTAL +
T-SUM-COL1(3)
WHEN OTHER
DISPLAY 'HAI'
END-EVALUATE.
MOVE WS-TOTAL TO R-SUM-TOTAL.
COMPUTE WS-TOT-FINAL = WS-TOT-FINAL + WS-TOTAL.
IF CURRENT-KEY = SPACES
WRITE REPORT-LINE FROM REPORT-REC
ELSE
MOVE SPACES TO R-DIV
MOVE SPACES TO R-HOME
MOVE SPACES TO R-DEPT
WRITE REPORT-LINE FROM REPORT-REC
END-IF.
PERFORM 450-CHECK-REPORT-IO THRU 450-CHECK-REPORT-IO-EXIT.
MOVE INPUT-KEY(1:10) TO CURRENT-KEY.
TOTAL-PARA.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 400-PROCESS *
******************************************************************
MOVE T-SUM-COL1-TOTAL TO R-SUM-COL1-TOTAL.
MOVE T-SUM-COL2-TOTAL TO R-SUM-COL2-TOTAL.
MOVE T-SUM-COL3-TOTAL TO R-SUM-COL3-TOTAL.
MOVE WS-TOT-FINAL TO R-TOT-FINAL.
WRITE REPORT-LINE FROM REPORT-TOTAL.
PERFORM 450-CHECK-REPORT-IO THRU 450-CHECK-REPORT-IO-EXIT.
450-CHECK-REPORT-IO.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 120-WRITE-HEADERS *
******************************************************************
D DISPLAY '450-CHECK-REPORT-IO'.
IF REPORT-FILE-STATUS NOT = '00'
MOVE '450:WRITE FAILED FOR REPORT FILE' TO ABEND-MSG
MOVE REPORT-FILE-STATUS TO ABEND-STATUS
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-IF.
D DISPLAY '450-CHECK-REPORT-IO-EXIT'.
450-CHECK-REPORT-IO-EXIT.
EXIT.
800-FINISH.
******************************************************************
* THIS PROCEDURE *
* CALLS: *
* CALLED BY: 000-MAINLINE *
******************************************************************
D DISPLAY '800-FINISH'.
CLOSE INPUT-FILE.
IF INPUT-FILE-IO-OKAY
CONTINUE
ELSE
DISPLAY '************************************'
MOVE '800: CLOSE FAILED FOR INPUT FILE' TO ABEND-MSG
MOVE INPUT-FILE-STATUS TO ABEND-STATUS
DISPLAY '************************************'
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-IF.
CLOSE REPORT-FILE.
IF REPORT-FILE-IO-OKAY
CONTINUE
ELSE
DISPLAY '*********** ERROR *******************'
MOVE '800 :CLOSE FAILED FOR REPORT FILE' TO ABEND-MSG
MOVE REPORT-FILE-STATUS TO ABEND-STATUS
DISPLAY '*********** ERROR *******************'
PERFORM 999-ABEND-ERROR THRU 999-ABEND-ERROR-EXIT
END-IF.
D DISPLAY '800-FINISH-EXIT'.
800-FINISH-EXIT.
EXIT.
999-ABEND-ERROR.
******************************************************************
* THIS PROCEDURE CAUSES THE PROGRAM TO STOP IN THE EVENT OF AN *
* ERROR AND INHIBITS FURTHER PROCESSING. *
* CALLS: STOP-RUN. *
******************************************************************
D DISPLAY '999-ABEND-ERROR'.
DISPLAY '*************ERROR*********************'.
DISPLAY 'PROGRAM ENCOUNTERED A FATAL ERROR'.
DISPLAY ABEND-MSG.
IF ABEND-STATUS IS NOT = SPACES
DISPLAY 'ABEND-STATUS = ', ABEND-STATUS
END-IF.
PERFORM STOP-RUN.
D DISPLAY '999-ABEND-ERROR-EXIT'.
999-ABEND-ERROR-EXIT.
EXIT.
STOP-RUN.
STOP RUN.
INPUT DATASET
Code:
AB PQRS PAL F 1 10
AB PQRS PAL F 2 20
AB PQRS PAL F 3 30
AB PQRS PAL 001 M 1 30
AB PQRS PAL 001 M 2 40
AB PQRS PAL 002 M 1 99
AB PQRS PAL 002 M 2 25
AB PQRS PAL 002 M 3 12
AB PQRS PAL 003 M 1 11
AB PQRS PAL 003 M 2 30
AB PQRS PAL 011 M 1 96
AB PQRS PAL 011 M 2 65
AB PQRS PAL 012 M 1 22
AB PQRS PAL 012 M 2 44
AB PQRS PAL 015 M 1 36
AB PQRS PAL 015 M 2 20
AB PQRS PAL 016 M 1 20
AB PQRS PAL 016 M 2 15
AB PQRS PAL 020 M 1 90
AB PQRS PAL 020 M 2 40
AB PQRS PAL 021 M 1 30
AB PQRS PAL 021 M 2 5
AB PQRS PAL 022 M 1 80
AB PQRS PAL 022 M 2 88
AB PQRS PAL 070 M 1 70
AB PQRS PAL 070 M 3 30
AB PQRS PAL 080 M 2 35
AB PQRS PAL 085 M 1 70
AB PQRS PAL 085 M 2 50
AB PQRS PAL 090 M 2 25
AB PQRS PAL 090 M 3 25
AB PQRS PAL 095 M 3 50
AB PQRS PAL 100 M 1 50
GETTING OUTPUT
Code:
DIV HOME DEPT NO STATUS COL1 COL2 COL3 TOTAL
--- ---- ----- ---- ----- ---- ---- ---- ----
AB PQRS PAL F 10 20 30 60
001 M 30 40 70
002 M 99 25 12 136
003 M 11 30 41
011 M 96 65 161
012 M 22 44 66
015 M 36 20 56
016 M 20 15 35
020 M 90 40 130
021 M 30 5 35
022 M 80 88 168
070 M 70 XX 100
080 M 35 35
085 M 70 50 120
090 M 25 25 50
095 M 50 50
100 M 50 50
---- ---- ---- ----
TOTAL
714 467 42 1363
XX MEANS VALUE IS MISSING
EXPECTED OUTPUT
Code:
DIV HOME DEPT NO STATUS COL1 COL2 COL3 TOTAL
--- ---- ----- ---- ----- ---- ---- ---- ----
AB PQRS PAL F 10 20 30 60
001 M 30 40 70
002 M 99 25 12 136
003 M 11 30 41
011 M 96 65 161
012 M 22 44 66
015 M 36 20 56
016 M 20 15 35
020 M 90 40 130
021 M 30 5 35
022 M 80 88 168
070 M 70 30 100
080 M 35 35
085 M 70 50 120
090 M 25 25 50
095 M 50 50
100 M 50 50
---- ---- ---- ----
TOTAL
714 502 147 1363
All times are GMT - 5 Hours Goto page Previous1, 2
Page 2 of 2
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum