我仍然是COBOL的新手,并且还在学习二维表。在这里,我遇到了困难,如何累加行的两个值的总和,对于BSIT (1,1) = 100,对于BSCS (2,1) = 200,总共300。
输入文件为: 100200300400500600200300

IDENTIFICATION DIVISION.
PROGRAM-ID. TWODIME.
*AUTHOR..
*INSTALLATION. MANDALUYONG CITY.
*DATE-WRITTEN. SEPTEMBER 9, 2019.
*DATE-COMPILED. SEPTEMBER 10, 2019.
*SECURITY. .
*REMARKS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ANGELO-PC.
OBJECT-COMPUTER. ANGELO-PC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN TO 'VALSTUD.TXT'.
SELECT OUTFILE ASSIGN TO 'VALOUT.TXT'.
DATA DIVISION.
FILE SECTION.
FD INFILE
LABEL RECORD IS STANDARD
DATA RECORD IS INREC.
01 INREC.
02 YEAR OCCURS 4 TIMES.
03 COURSE OCCURS 2 TIMES PIC 999.
02 TOTALBA PIC 9(5)V99.
FD OUTFILE
LABEL RECORD IS OMITTED
DATA RECORD IS OUTREC.
01 OUTREC.
02 FILLER PIC X(80).
WORKING-STORAGE SECTION.
01 I PIC 9 VALUE IS 0.
01 J PIC 9 VALUE IS 0.
01 EOFSW PIC 9 VALUE IS 0.
01 TYEAR.
02 TS PIC 9999 OCCURS 4 TIMES.
01 HEAD-1.
02 FILLER PIC X(20) VALUE SPACE.
02 FILLER PIC X(23) VALUE 'POLYTECHNIC UNIVERSITY '.
02 FILLER PIC X(18) VALUE 'OF THE PHILIPPINES'.
01 HEAD-2.
02 FILLER PIC X(32) VALUE SPACE.
02 FILLER PIC X(10) VALUE 'STA. MESA,'.
02 FILLER PIC X(7) VALUE ' MANILA'.
01 HEAD-3.
02 FILLER PIC X(31) VALUE SPACE.
02 FILLER PIC X(7) VALUE 'STUDENT'.
02 FILLER PIC X(11) VALUE ' POPULATION'.
01 SUB-1.
02 FILLER PIC X(3) VALUE SPACE.
02 FILLER PIC X(10) VALUE 'YEAR LEVEL'.
02 FILLER PIC X(27) VALUE SPACE.
02 FILLE PIC X(6) VALUE 'COURSE'.
01 SUB-2.
02 FILLER PIC X(20) VALUE SPACE.
02 FILLER PIC X(4) VALUE 'BSCS'.
02 FILLER PIC X(16) VALUE SPACE.
02 FILLER PIC X(4) VALUE 'BSIT'.
02 FILLER PIC X(16) VALUE SPACE.
02 FILLER PIC X(5) VALUE 'TOTAL'.
01 DETAILS.
02 FILLER PIC X(5) VALUE SPACE.
02 P-YEAR PIC X(9).
02 FILLER PIC X(6) VALUE SPACE.
02 P-TAP OCCURS 2 TIMES.
03 P-CTR PIC 999.
03 FILLER PIC X(17) VALUE SPACE.
02 P-TSTUDYEAR PIC 99,999.
01 TOTAL-1.
SCREEN SECTION.
01 SCRE.
02 BLANK SCREEN.
PROCEDURE DIVISION.
MAIN-RTN.
PERFORM INIT-RTN THRU INIT-RTN-END.
PERFORM PROCESS-RTN UNTIL EOFSW = 1.
PERFORM FINISH-RTN.
STOP RUN.
INIT-RTN.
OPEN INPUT INFILE, OUTPUT OUTFILE.
READ INFILE AT END PERFORM END-RTN.
PERFORM HEADING-RTN.
INIT-RTN-END.
END-RTN.
MOVE 1 TO EOFSW.
DISPLAY 'EMPTY FILE' LINE 3 COLUMN 20.
HEADING-RTN.
WRITE OUTREC FROM HEAD-1 AFTER PAGE.
WRITE OUTREC FROM HEAD-2 AFTER 1.
WRITE OUTREC FROM HEAD-3 AFTER 3.
WRITE OUTREC FROM SUB-1 AFTER 2.
WRITE OUTREC FROM SUB-2 AFTER 1.
PROCESS-RTN.
DISPLAY SCRE.
PERFORM ADD-RTN VARYING I FROM 1 BY 1
UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL
J > 2.
PERFORM MOVE-RTN VARYING I FROM 1 BY 1 UNTIL
I > 4.
READ INFILE AT END MOVE 1 TO EOFSW.
ADD-RTN.
ADD COURSE ( I , J ) TO TS ( I ).
MOVE-RTN.
IF I = 1 MOVE 'FRESHMEN' TO P-YEAR PERFORM A.
IF I = 2 MOVE 'SOPHOMORE' TO P-YEAR PERFORM A.
IF I = 3 MOVE 'JUNIOR' TO P-YEAR PERFORM A.
IF I = 4 MOVE 'SENIOR' TO P-YEAR PERFORM A.
A.
PERFORM MOVE2-RTN VARYING J FROM 1 BY 1 UNTIL
J > 2.
WRITE OUTREC FROM DETAILS AFTER 1.
MOVE2-RTN.
MOVE TS ( I ) TO P-TSTUDYEAR.
MOVE COURSE ( I , J ) TO P-TAP ( J ).
FINISH-RTN.
CLOSE INFILE, OUTFILE.
DISPLAY 'OWARI DA!' LINE 5 COLUMN 20.发布于 2019-09-07 08:06:49
我发现了三个问题:
TOATLBA的数据。我在测试数据中添加了7个零。01 TOTAL-1.没有PICTURE子句。在添加值之前,我将其设置为comment.TS ( I )不为零。我添加了代码以使用您的样式将数据置零。

IDENTIFICATION DIVISION.
PROGRAM-ID. TWODIME.
*AUTHOR..
*INSTALLATION. MANDALUYONG CITY.
*DATE-WRITTEN. SEPTEMBER 9, 2019.
*DATE-COMPILED. SEPTEMBER 10, 2019.
*SECURITY.
*REMARKS.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. ANGELO-PC.
OBJECT-COMPUTER. ANGELO-PC.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT INFILE ASSIGN TO 'VALSTUD.TXT'.
SELECT OUTFILE ASSIGN TO 'VALOUT.TXT'.
DATA DIVISION.
FILE SECTION.
FD INFILE
LABEL RECORD IS STANDARD
DATA RECORD IS INREC.
01 INREC.
02 YEAR OCCURS 4 TIMES.
03 COURSE OCCURS 2 TIMES PIC 999.
02 TOTALBA PIC 9(5)V99.
FD OUTFILE
LABEL RECORD IS OMITTED
DATA RECORD IS OUTREC.
01 OUTREC.
02 FILLER PIC X(80).
WORKING-STORAGE SECTION.
01 I PIC 9 VALUE IS 0.
01 J PIC 9 VALUE IS 0.
01 EOFSW PIC 9 VALUE IS 0.
01 TYEAR.
02 TS PIC 9999 OCCURS 4 TIMES.
01 HEAD-1.
02 FILLER PIC X(20) VALUE SPACE.
02 FILLER PIC X(23) VALUE 'POLYTECHNIC UNIVERSITY '.
02 FILLER PIC X(18) VALUE 'OF THE PHILIPPINES'.
01 HEAD-2.
02 FILLER PIC X(32) VALUE SPACE.
02 FILLER PIC X(10) VALUE 'STA. MESA,'.
02 FILLER PIC X(7) VALUE ' MANILA'.
01 HEAD-3.
02 FILLER PIC X(31) VALUE SPACE.
02 FILLER PIC X(7) VALUE 'STUDENT'.
02 FILLER PIC X(11) VALUE ' POPULATION'.
01 SUB-1.
02 FILLER PIC X(3) VALUE SPACE.
02 FILLER PIC X(10) VALUE 'YEAR LEVEL'.
02 FILLER PIC X(27) VALUE SPACE.
02 FILLE PIC X(6) VALUE 'COURSE'.
01 SUB-2.
02 FILLER PIC X(20) VALUE SPACE.
02 FILLER PIC X(4) VALUE 'BSCS'.
02 FILLER PIC X(16) VALUE SPACE.
02 FILLER PIC X(4) VALUE 'BSIT'.
02 FILLER PIC X(16) VALUE SPACE.
02 FILLER PIC X(5) VALUE 'TOTAL'.
01 DETAILS.
02 FILLER PIC X(5) VALUE SPACE.
02 P-YEAR PIC X(9).
02 FILLER PIC X(6) VALUE SPACE.
02 P-TAP OCCURS 2 TIMES.
03 P-CTR PIC 999.
03 FILLER PIC X(17) VALUE SPACE.
02 P-TSTUDYEAR PIC 99,999.
*01 TOTAL-1.
SCREEN SECTION.
01 SCRE.
02 BLANK SCREEN.
PROCEDURE DIVISION.
MAIN-RTN.
PERFORM INIT-RTN THRU INIT-RTN-END.
PERFORM PROCESS-RTN UNTIL EOFSW = 1.
PERFORM FINISH-RTN.
STOP RUN.
INIT-RTN.
OPEN INPUT INFILE, OUTPUT OUTFILE.
READ INFILE AT END PERFORM END-RTN.
PERFORM HEADING-RTN.
INIT-RTN-END.
END-RTN.
MOVE 1 TO EOFSW.
DISPLAY 'EMPTY FILE' LINE 3 COLUMN 20.
HEADING-RTN.
WRITE OUTREC FROM HEAD-1 AFTER PAGE.
WRITE OUTREC FROM HEAD-2 AFTER 1.
WRITE OUTREC FROM HEAD-3 AFTER 3.
WRITE OUTREC FROM SUB-1 AFTER 2.
WRITE OUTREC FROM SUB-2 AFTER 1.
PROCESS-RTN.
DISPLAY SCRE.
PERFORM ZERO-RTN VARYING I FROM 1 BY 1
UNTIL I > 4.
PERFORM ADD-RTN VARYING I FROM 1 BY 1
UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL
J > 2.
PERFORM MOVE-RTN VARYING I FROM 1 BY 1 UNTIL
I > 4.
READ INFILE AT END MOVE 1 TO EOFSW.
ZERO-RTN.
MOVE ZERO TO TS ( I ).
ADD-RTN.
ADD COURSE ( I , J ) TO TS ( I ).
MOVE-RTN.
IF I = 1 MOVE 'FRESHMEN' TO P-YEAR PERFORM A.
IF I = 2 MOVE 'SOPHOMORE' TO P-YEAR PERFORM A.
IF I = 3 MOVE 'JUNIOR' TO P-YEAR PERFORM A.
IF I = 4 MOVE 'SENIOR' TO P-YEAR PERFORM A.
A.
PERFORM MOVE2-RTN VARYING J FROM 1 BY 1 UNTIL
J > 2.
WRITE OUTREC FROM DETAILS AFTER 1.
MOVE2-RTN.
MOVE TS ( I ) TO P-TSTUDYEAR.
MOVE COURSE ( I , J ) TO P-TAP ( J ).
FINISH-RTN.
CLOSE INFILE, OUTFILE.
DISPLAY 'OWARI DA!' LINE 5 COLUMN 20.请注意,MOVE-RTN的效率很低。最好将文本值放在一个表中,并且只移动条目( I ) TO P-YEAR。
同样,MOVE TS ( I ) TO P-TSTUDYEAR.也会执行两次。该语句可以移到WRITE OUTREC ...之前。
https://stackoverflow.com/questions/57826523
复制相似问题