如何修复Cobol程序中的排序问题?
我有一个程序,假设它对输入文件(seq)进行排序,然后输出一个RPT文件 这个程序代码应该是正确的,问题应该只在这个程序的排序 问题:程序成功地对数据进行了正确排序,我的问题是,排序后的文件无法继续格式化并进行计算 请:在代码中显示并解释,这是我第一次尝试对文件进行排序 序号: 节目:如何修复Cobol程序中的排序问题?,cobol,Cobol,我有一个程序,假设它对输入文件(seq)进行排序,然后输出一个RPT文件 这个程序代码应该是正确的,问题应该只在这个程序的排序 问题:程序成功地对数据进行了正确排序,我的问题是,排序后的文件无法继续格式化并进行计算 请:在代码中显示并解释,这是我第一次尝试对文件进行排序 序号: 节目: IDENTIFICATION DIVISION. PROGRAM-ID. BASEBALL-5. * Tate ****************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. BASEBALL-5.
* Tate
******************************************************************
* This program will sort different stats for different baseball
* players while keeping running totals and averages with breaks.
******************************************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT BASEBALL-FILE-SORTED
ASSIGN TO 'BASEBALL-5.SOR'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SORT-FILE-X
ASSIGN TO 'SORT.DAT'.
SELECT BASEBALL-FILE-IN
ASSIGN TO 'BASEBALL-5.SEQ'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT BASEBALL-FILE-OUT
ASSIGN TO 'BASEBALL-5.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD BASEBALL-FILE-SORTED.
01 BASEBALL-RECORD-SORTED PIC X(36).
SD SORT-FILE-X.
01 SORT-RECORD.
05 NAME-S PIC X(18).
05 PIC XX.
05 LEAGUE-S PIC XX.
05 PIC X.
05 TEAM-S PIC XXX.
05 PIC X(10).
FD BASEBALL-FILE-IN.
01 BASEBALL-RECORD-IN.
05 NAME-IN PIC X(18).
05 PIC XX.
05 LEAGUE-IN PIC XX.
05 PIC X.
05 TEAM-IN PIC X(3).
05 PIC X(3).
05 AT-BATS-IN PIC 9(3).
05 PIC X.
05 HITS-IN PIC 9(3).
FD BASEBALL-FILE-OUT.
01 BASEBALL-RECORD-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 LINES-PRINTED PIC 99 VALUE 99.
01 PAGE-NUMBER PIC 99 VALUE ZERO.
01 WS-FIRST-RECORD-READ PIC X(3) VALUE 'YES'.
01 WS-FIRST-TIME-THRU PIC X(3) VALUE 'YES'.
01 WS-HOLD-PREVIOUS-TEAM-IN PIC X(3) VALUE SPACES.
01 WS-HOLD-PREVIOUS-LEAGUE-IN PIC XX VALUE SPACES.
01 WS-TEAM-HITS PIC 9(4) VALUE ZERO.
01 WS-TEAM-AT-BATS PIC 9(4) VALUE ZERO.
01 WS-TEAM-AVERAGE PIC V999 VALUE ZERO.
01 WS-AVERAGE PIC V999 VALUE ZERO.
01 WS-LEAGUE-HITS PIC 9(5) VALUE ZERO.
01 WS-LEAGUE-AT-BATS PIC 9(5) VALUE ZERO.
01 WS-LEAGUE-AVERAGE PIC V999 VALUE ZERO.
01 WS-GRAND-HITS PIC 9(6) VALUE ZERO.
01 WS-GRAND-AT-BATS PIC 9(6) VALUE ZERO.
01 WS-GRAND-AVERAGE PIC V999 VALUE ZERO.
01 WS-HIGHEST-AVERAGE PIC V999 VALUE ZERO.
01 WS-LOWEST-AVERAGE PIC V999 VALUE .999.
01 WS-BLANK-LINE PIC X(80) VALUE SPACES.
01 WS-CURRENT-DATE-DATA.
05 WS-CURRENT-DATE.
10 RUN-YEAR PIC XX.
10 RUN-MONTH PIC XX.
10 RUN-DAY PIC XX.
01 HEADING-LINE-1.
05 PIC X(24) VALUE SPACES.
05 PIC X(26) VALUE 'BASEBALL PLAYER STATISTICS'.
05 PIC X(9) VALUE SPACES.
05 HL-1-DATE.
10 MONTH-2 PIC XX.
10 PIC X VALUE'/'.
10 DAY-2 PIC XX.
10 PIC X VALUE'/'.
10 YEAR-2 PIC XX.
05 PIC X(4) VALUE SPACES.
05 PIC X(4) VALUE 'PAGE'.
05 HL-1-PAGE-NUMBER PIC Z9.
01 HEADING-LINE-2.
05 PIC X(6) VALUE 'LEAGUE'.
05 PIC X(4) VALUE SPACES.
05 PIC X(4) VALUE 'TEAM'.
05 PIC X(6) VALUE SPACES.
05 PIC X(4) VALUE 'NAME'.
05 PIC X(18) VALUE SPACES.
05 PIC X(4) VALUE 'HITS'.
05 PIC X(9) VALUE SPACES.
05 PIC X(7) VALUE 'AT BATS'.
05 PIC X(6) VALUE SPACES.
05 PIC X(7) VALUE 'AVERAGE'.
01 DETAIL-LINE.
05 DL-LEAGUE PIC XX.
05 BLANK-A-OUT PIC X(8) VALUE SPACES.
05 DL-TEAM PIC X(3).
05 BLANK-B-OUT PIC X(7) VALUE SPACES.
05 DL-NAME PIC X(12).
05 BLANK-C-OUT PIC X(11) VALUE SPACES.
05 DL-HITS PIC ZZ9.
05 BLANK-D-OUT PIC X(13) VALUE SPACES.
05 DL-AT-BATS PIC ZZ9.
05 BLANK-E-OUT PIC X(9) VALUE SPACES.
05 DL-AVERAGE-OUT PIC .999.
01 TEAM-TOTALS.
05 ZTL-LEAGUE PIC XX.
05 PIC X(8) VALUE SPACES.
05 ZTL-TEAM PIC X(3).
05 PIC X(7) VALUE SPACES.
05 PIC X(15) VALUE '* Team Totals *'.
05 PIC X(6) VALUE SPACES.
05 ZTL-TEAM-HITS PIC Z,ZZ9.
05 PIC X(11) VALUE SPACES.
05 ZTL-TEAM-AT-BATS PIC Z,ZZ9.
05 PIC X(9) VALUE SPACES.
05 ZTL-TEAM-AVERAGE PIC .999.
01 TOTALS-LINE.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* Final Totals *'.
05 PIC X(3) VALUE SPACES.
05 TL-GRAND-HITS PIC ZZZ,ZZZ.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-AT-BATS PIC ZZZ,ZZZ.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-AVERAGE PIC .999.
01 LOW-TOTALS.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* Low Average *'.
05 PIC X(35) VALUE SPACES.
05 TL-LOW-AVERAGE PIC .999.
01 HIGH-TOTALS.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* High Average *'.
05 PIC X(35) VALUE SPACES.
05 TL-HIGH-AVERAGE PIC .999.
01 LEAGUE-TOTALS.
05 LTL-LEAGUE PIC XX.
05 PIC X(18) VALUE SPACES.
05 PIC X(17) VALUE '* League Totals *'.
05 PIC X(3) VALUE SPACES.
05 LTL-LEAGUE-HITS PIC ZZ,ZZ9.
05 PIC X(10) VALUE SPACES.
05 LTL-LEAGUE-AT-BATS PIC ZZ,ZZ9.
05 PIC X(9) VALUE SPACES.
05 LTL-LEAGUE-AVERAGE PIC .999.
PROCEDURE DIVISION.
100-MAIN.
SORT SORT-FILE-X
DESCENDING KEY LEAGUE-S
ASCENDING KEY TEAM-S
ASCENDING KEY NAME-S
USING BASEBALL-FILE-IN
GIVING BASEBALL-FILE-SORTED
PERFORM 140-SORT-OUTPUT-PROCEDURE.
140-SORT-OUTPUT-PROCEDURE.
OPEN INPUT BASEBALL-FILE-SORTED
OPEN OUTPUT BASEBALL-FILE-OUT
ACCEPT WS-CURRENT-DATE FROM DATE
MOVE RUN-MONTH TO MONTH-2
MOVE RUN-DAY TO DAY-2
MOVE RUN-YEAR TO YEAR-2
PERFORM 300-WRITE-HEADINGS
PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'
READ BASEBALL-FILE-OUT
AT END
PERFORM 350-TEAM-TOTALS-ROUTINE
PERFORM 375-LEAGUE-TOTALS-ROUTINE
PERFORM 400-TOTALS-ROUTINE
PERFORM 425-LOW-ROUTINE
PERFORM 450-HIGH-ROUTINE
MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
NOT AT END
PERFORM 200-PROCESS-ONE-RECORD
END-READ
END-PERFORM
CLOSE BASEBALL-FILE-SORTED
CLOSE BASEBALL-FILE-OUT
STOP RUN.
200-PROCESS-ONE-RECORD.
IF TEAM-IN <> WS-HOLD-PREVIOUS-TEAM-IN AND WS-FIRST-RECORD-READ <> 'YES'
PERFORM 350-TEAM-TOTALS-ROUTINE
END-IF
IF LEAGUE-IN <> WS-HOLD-PREVIOUS-LEAGUE-IN AND WS-FIRST-RECORD-READ <> 'YES'
PERFORM 375-LEAGUE-TOTALS-ROUTINE
END-IF
MOVE 'NO' TO WS-FIRST-RECORD-READ
MOVE LEAGUE-IN TO WS-HOLD-PREVIOUS-LEAGUE-IN
MOVE TEAM-IN TO WS-HOLD-PREVIOUS-TEAM-IN
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
COMPUTE WS-AVERAGE ROUNDED = HITS-IN / AT-BATS-IN
MOVE LEAGUE-IN TO DL-LEAGUE
MOVE SPACES TO BLANK-A-OUT
MOVE TEAM-IN TO DL-TEAM
MOVE SPACES TO BLANK-B-OUT
MOVE NAME-IN TO DL-NAME
MOVE SPACES TO BLANK-C-OUT
MOVE HITS-IN TO DL-HITS
MOVE SPACES TO BLANK-D-OUT
MOVE AT-BATS-IN TO DL-AT-BATS
MOVE SPACES TO BLANK-E-OUT
MOVE WS-AVERAGE TO DL-AVERAGE-OUT
MOVE DETAIL-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT
AFTER ADVANCING 1 LINE
ADD 1 TO LINES-PRINTED
* CALCULATE FINAL TOTALS
COMPUTE WS-GRAND-HITS = WS-GRAND-HITS + HITS-IN
COMPUTE WS-GRAND-AT-BATS = WS-GRAND-AT-BATS + AT-BATS-IN
COMPUTE WS-GRAND-AVERAGE ROUNDED = WS-GRAND-HITS / WS-GRAND-AT-BATS.
* CALCULATE ZTL HERE
COMPUTE WS-TEAM-HITS = WS-TEAM-HITS + HITS-IN
COMPUTE WS-TEAM-AT-BATS = WS-TEAM-AT-BATS + AT-BATS-IN
COMPUTE WS-TEAM-AVERAGE ROUNDED = WS-TEAM-HITS / WS-TEAM-AT-BATS
* CALCULATE LTL HERE
COMPUTE WS-LEAGUE-HITS = WS-LEAGUE-HITS + HITS-IN
COMPUTE WS-LEAGUE-AT-BATS = WS-LEAGUE-AT-BATS + AT-BATS-IN
COMPUTE WS-LEAGUE-AVERAGE ROUNDED = WS-LEAGUE-HITS / WS-LEAGUE-AT-BATS
* CALCULATE LOW/HIGH AVERAGES
IF WS-AVERAGE > WS-HIGHEST-AVERAGE
MOVE WS-AVERAGE TO WS-HIGHEST-AVERAGE
END-IF
IF WS-AVERAGE < WS-LOWEST-AVERAGE
MOVE WS-AVERAGE TO WS-LOWEST-AVERAGE
END-IF.
300-WRITE-HEADINGS.
ADD 1 TO PAGE-NUMBER
MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT
IF WS-FIRST-TIME-THRU = 'YES'
WRITE BASEBALL-RECORD-OUT
MOVE 'NO' TO WS-FIRST-TIME-THRU
ELSE
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING PAGE
END-IF
MOVE HEADING-LINE-2 TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT
MOVE 1 TO LINES-PRINTED.
350-TEAM-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-HOLD-PREVIOUS-LEAGUE-IN TO ZTL-LEAGUE
MOVE WS-HOLD-PREVIOUS-TEAM-IN TO ZTL-TEAM
MOVE WS-TEAM-HITS TO ZTL-TEAM-HITS
MOVE WS-TEAM-AT-BATS TO ZTL-TEAM-AT-BATS
MOVE WS-TEAM-AVERAGE TO ZTL-TEAM-AVERAGE
MOVE TEAM-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED
MOVE WS-BLANK-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 1 LINES
ADD 1 TO LINES-PRINTED
MOVE ZEROS TO WS-TEAM-HITS
MOVE ZEROS TO WS-TEAM-AT-BATS
MOVE ZEROS TO WS-TEAM-AVERAGE.
375-LEAGUE-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-HOLD-PREVIOUS-LEAGUE-IN TO LTL-LEAGUE
MOVE WS-LEAGUE-HITS TO LTL-LEAGUE-HITS
MOVE WS-LEAGUE-AT-BATS TO LTL-LEAGUE-AT-BATS
MOVE WS-LEAGUE-AVERAGE TO LTL-LEAGUE-AVERAGE
MOVE LEAGUE-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED
MOVE WS-BLANK-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 1 LINES
ADD 1 TO LINES-PRINTED
MOVE ZEROS TO WS-LEAGUE-HITS
MOVE ZEROS TO WS-LEAGUE-AT-BATS
MOVE ZEROS TO WS-LEAGUE-AVERAGE.
400-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-GRAND-HITS TO TL-GRAND-HITS
MOVE WS-GRAND-AT-BATS TO TL-GRAND-AT-BATS
MOVE WS-GRAND-AVERAGE TO TL-GRAND-AVERAGE
MOVE TOTALS-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED.
425-LOW-ROUTINE.
MOVE WS-LOWEST-AVERAGE TO TL-LOW-AVERAGE
MOVE LOW-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES.
450-HIGH-ROUTINE.
MOVE WS-HIGHEST-AVERAGE TO TL-HIGH-AVERAGE
MOVE HIGH-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES.
识别部门。
节目编号:棒球5。
*泰特
******************************************************************
*这个程序将为不同的棒球分类不同的统计数据
*球员在休息时保持总成绩和平均成绩。
******************************************************************
环境司。
输入输出部分。
文件控制。
选择“按文件排序”
分配给“棒球-5.SOR”
组织是按行顺序的。
选择SORT-FILE-X
分配给“SORT.DAT”。
选择“归档”
分配给“棒球-5.序号”
组织是按行顺序的。
选择“文件输出”
分配到“棒球-5.RPT”
组织是按行顺序的。
数据司。
文件部分。
FD-FILE-SORTED。
01棒球记录分类图X(36)。
SD-SORT-FILE-X。
01分类记录。
05 NAME-S图X(18)。
05图二十。
05联赛-S图XX。
05图十。
05队-S照片XXX。
05图X(10)。
FD棒球存档。
01个棒球记录。
图X(18)中的05名称。
05图二十。
图XX中的05联赛。
05图十。
图X(3)中的05团队。
05图X(3)。
图9(3)中的05 AT-BATS-。
05图十。
图9(3)中的05个点击。
文件归档。
01棒球世界纪录图X(80)。
工作和储存科。
01是否有更多记录PIC X(3)值“是”。
01行-打印PIC 99值99。
01页码PIC 99值为零。
01 WS-FIRST-RECORD-READ PIC X(3)值“是”。
01 WS-FIRST-TIME-THRU照片X(3)值“是”。
01 WS-HOLD-PREVIOUS-TEAM-IN PIC X(3)值空间。
01 WS-HOLD-PREVIOUS-LEAGUE-IN PIC XX值空间。
01 WS-TEAM-HITS图9(4)值为零。
01 WS-TEAM-AT-BATS PIC 9(4)值为零。
01 WS-TEAM-AVERAGE PIC V999值为零。
01 WS-平均PIC V999值为零。
01 WS-LEAGUE-HITS图9(5)值为零。
01 WS-LEAGUE-AT-BATS图片9(5)值为零。
01 WS-LEAGUE-平均PIC V999值为零。
01 WS-GRAND-HITS PIC 9(6)值为零。
01 WS-GRAND-AT-BATS图9(6)值为零。
01 WS-GRAND AVERAGE PIC V999值为零。
01 WS-最高-平均PIC V999值为零。
01 WS-最低-平均PIC V999值。999。
01 WS-空白行PIC X(80)值空格。
01 WS-CURRENT-DATE-DATA。
05 WS-当前日期。
10运行年图XX。
10运行月图XX。
10运行日图XX。
01标题行-1。
05 PIC X(24)值空间。
05 PIC X(26)值“棒球运动员统计”。
05 PIC X(9)值空间。
05 HL-1-日期。
10个月-2图XX。
10 PIC X值“/”。
10天-2图XX。
10 PIC X值“/”。
10年-2图XX。
05 PIC X(4)值空间。
05图片X(4)值“第页”。
05 HL-1-页码PIC Z9。
01标题行2。
05图X(6)值“联盟”。
05 PIC X(4)值空间。
05图X(4)价值观“团队”。
05 PIC X(6)值空间。
05图X(4)值“名称”。
05 PIC X(18)值空间。
05 PIC X(4)值“命中”。
05 PIC X(9)值空间。
05 PIC X(7)值“在BATS”。
05 PIC X(6)值空间。
05 PIC X(7)值“平均值”。
01详图-LINE。
05 DL-LEAGUE PIC XX。
05空白图片X(8)值空间。
05 DL-团队PIC X(3)。
05空白B-OUT PIC X(7)值空间。
05 DL-NAME PIC X(12)。
05空白C-OUT PIC X(11)值空间。
05 DL-HITS图ZZ9。
05空白图片X(13)值空间。
05 DL-AT-BATS图ZZ9。
05空白图片X(9)值空间。
05 DL-平均值,图999。
01队-总数。
05 ZTL-LEAGUE图片XX。
05 PIC X(8)值空间。
05 ZTL-团队图片X(3)。
05 picx(7)值
IDENTIFICATION DIVISION.
PROGRAM-ID. BASEBALL-5.
* Tate
******************************************************************
* This program will sort different stats for different baseball
* players while keeping running totals and averages with breaks.
******************************************************************
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT BASEBALL-FILE-SORTED
ASSIGN TO 'BASEBALL-5.SOR'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT SORT-FILE-X
ASSIGN TO 'SORT.DAT'.
SELECT BASEBALL-FILE-IN
ASSIGN TO 'BASEBALL-5.SEQ'
ORGANIZATION IS LINE SEQUENTIAL.
SELECT BASEBALL-FILE-OUT
ASSIGN TO 'BASEBALL-5.RPT'
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD BASEBALL-FILE-SORTED.
01 BASEBALL-RECORD-SORTED PIC X(36).
SD SORT-FILE-X.
01 SORT-RECORD.
05 NAME-S PIC X(18).
05 PIC XX.
05 LEAGUE-S PIC XX.
05 PIC X.
05 TEAM-S PIC XXX.
05 PIC X(10).
FD BASEBALL-FILE-IN.
01 BASEBALL-RECORD-IN.
05 NAME-IN PIC X(18).
05 PIC XX.
05 LEAGUE-IN PIC XX.
05 PIC X.
05 TEAM-IN PIC X(3).
05 PIC X(3).
05 AT-BATS-IN PIC 9(3).
05 PIC X.
05 HITS-IN PIC 9(3).
FD BASEBALL-FILE-OUT.
01 BASEBALL-RECORD-OUT PIC X(80).
WORKING-STORAGE SECTION.
01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'.
01 LINES-PRINTED PIC 99 VALUE 99.
01 PAGE-NUMBER PIC 99 VALUE ZERO.
01 WS-FIRST-RECORD-READ PIC X(3) VALUE 'YES'.
01 WS-FIRST-TIME-THRU PIC X(3) VALUE 'YES'.
01 WS-HOLD-PREVIOUS-TEAM-IN PIC X(3) VALUE SPACES.
01 WS-HOLD-PREVIOUS-LEAGUE-IN PIC XX VALUE SPACES.
01 WS-TEAM-HITS PIC 9(4) VALUE ZERO.
01 WS-TEAM-AT-BATS PIC 9(4) VALUE ZERO.
01 WS-TEAM-AVERAGE PIC V999 VALUE ZERO.
01 WS-AVERAGE PIC V999 VALUE ZERO.
01 WS-LEAGUE-HITS PIC 9(5) VALUE ZERO.
01 WS-LEAGUE-AT-BATS PIC 9(5) VALUE ZERO.
01 WS-LEAGUE-AVERAGE PIC V999 VALUE ZERO.
01 WS-GRAND-HITS PIC 9(6) VALUE ZERO.
01 WS-GRAND-AT-BATS PIC 9(6) VALUE ZERO.
01 WS-GRAND-AVERAGE PIC V999 VALUE ZERO.
01 WS-HIGHEST-AVERAGE PIC V999 VALUE ZERO.
01 WS-LOWEST-AVERAGE PIC V999 VALUE .999.
01 WS-BLANK-LINE PIC X(80) VALUE SPACES.
01 WS-CURRENT-DATE-DATA.
05 WS-CURRENT-DATE.
10 RUN-YEAR PIC XX.
10 RUN-MONTH PIC XX.
10 RUN-DAY PIC XX.
01 HEADING-LINE-1.
05 PIC X(24) VALUE SPACES.
05 PIC X(26) VALUE 'BASEBALL PLAYER STATISTICS'.
05 PIC X(9) VALUE SPACES.
05 HL-1-DATE.
10 MONTH-2 PIC XX.
10 PIC X VALUE'/'.
10 DAY-2 PIC XX.
10 PIC X VALUE'/'.
10 YEAR-2 PIC XX.
05 PIC X(4) VALUE SPACES.
05 PIC X(4) VALUE 'PAGE'.
05 HL-1-PAGE-NUMBER PIC Z9.
01 HEADING-LINE-2.
05 PIC X(6) VALUE 'LEAGUE'.
05 PIC X(4) VALUE SPACES.
05 PIC X(4) VALUE 'TEAM'.
05 PIC X(6) VALUE SPACES.
05 PIC X(4) VALUE 'NAME'.
05 PIC X(18) VALUE SPACES.
05 PIC X(4) VALUE 'HITS'.
05 PIC X(9) VALUE SPACES.
05 PIC X(7) VALUE 'AT BATS'.
05 PIC X(6) VALUE SPACES.
05 PIC X(7) VALUE 'AVERAGE'.
01 DETAIL-LINE.
05 DL-LEAGUE PIC XX.
05 BLANK-A-OUT PIC X(8) VALUE SPACES.
05 DL-TEAM PIC X(3).
05 BLANK-B-OUT PIC X(7) VALUE SPACES.
05 DL-NAME PIC X(12).
05 BLANK-C-OUT PIC X(11) VALUE SPACES.
05 DL-HITS PIC ZZ9.
05 BLANK-D-OUT PIC X(13) VALUE SPACES.
05 DL-AT-BATS PIC ZZ9.
05 BLANK-E-OUT PIC X(9) VALUE SPACES.
05 DL-AVERAGE-OUT PIC .999.
01 TEAM-TOTALS.
05 ZTL-LEAGUE PIC XX.
05 PIC X(8) VALUE SPACES.
05 ZTL-TEAM PIC X(3).
05 PIC X(7) VALUE SPACES.
05 PIC X(15) VALUE '* Team Totals *'.
05 PIC X(6) VALUE SPACES.
05 ZTL-TEAM-HITS PIC Z,ZZ9.
05 PIC X(11) VALUE SPACES.
05 ZTL-TEAM-AT-BATS PIC Z,ZZ9.
05 PIC X(9) VALUE SPACES.
05 ZTL-TEAM-AVERAGE PIC .999.
01 TOTALS-LINE.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* Final Totals *'.
05 PIC X(3) VALUE SPACES.
05 TL-GRAND-HITS PIC ZZZ,ZZZ.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-AT-BATS PIC ZZZ,ZZZ.
05 PIC X(9) VALUE SPACES.
05 TL-GRAND-AVERAGE PIC .999.
01 LOW-TOTALS.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* Low Average *'.
05 PIC X(35) VALUE SPACES.
05 TL-LOW-AVERAGE PIC .999.
01 HIGH-TOTALS.
05 PIC X(20) VALUE SPACES.
05 PIC X(16) VALUE '* High Average *'.
05 PIC X(35) VALUE SPACES.
05 TL-HIGH-AVERAGE PIC .999.
01 LEAGUE-TOTALS.
05 LTL-LEAGUE PIC XX.
05 PIC X(18) VALUE SPACES.
05 PIC X(17) VALUE '* League Totals *'.
05 PIC X(3) VALUE SPACES.
05 LTL-LEAGUE-HITS PIC ZZ,ZZ9.
05 PIC X(10) VALUE SPACES.
05 LTL-LEAGUE-AT-BATS PIC ZZ,ZZ9.
05 PIC X(9) VALUE SPACES.
05 LTL-LEAGUE-AVERAGE PIC .999.
PROCEDURE DIVISION.
100-MAIN.
SORT SORT-FILE-X
DESCENDING KEY LEAGUE-S
ASCENDING KEY TEAM-S
ASCENDING KEY NAME-S
USING BASEBALL-FILE-IN
GIVING BASEBALL-FILE-SORTED
PERFORM 140-SORT-OUTPUT-PROCEDURE.
140-SORT-OUTPUT-PROCEDURE.
OPEN INPUT BASEBALL-FILE-SORTED
OPEN OUTPUT BASEBALL-FILE-OUT
ACCEPT WS-CURRENT-DATE FROM DATE
MOVE RUN-MONTH TO MONTH-2
MOVE RUN-DAY TO DAY-2
MOVE RUN-YEAR TO YEAR-2
PERFORM 300-WRITE-HEADINGS
PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO'
READ BASEBALL-FILE-OUT
AT END
PERFORM 350-TEAM-TOTALS-ROUTINE
PERFORM 375-LEAGUE-TOTALS-ROUTINE
PERFORM 400-TOTALS-ROUTINE
PERFORM 425-LOW-ROUTINE
PERFORM 450-HIGH-ROUTINE
MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
NOT AT END
PERFORM 200-PROCESS-ONE-RECORD
END-READ
END-PERFORM
CLOSE BASEBALL-FILE-SORTED
CLOSE BASEBALL-FILE-OUT
STOP RUN.
200-PROCESS-ONE-RECORD.
IF TEAM-IN <> WS-HOLD-PREVIOUS-TEAM-IN AND WS-FIRST-RECORD-READ <> 'YES'
PERFORM 350-TEAM-TOTALS-ROUTINE
END-IF
IF LEAGUE-IN <> WS-HOLD-PREVIOUS-LEAGUE-IN AND WS-FIRST-RECORD-READ <> 'YES'
PERFORM 375-LEAGUE-TOTALS-ROUTINE
END-IF
MOVE 'NO' TO WS-FIRST-RECORD-READ
MOVE LEAGUE-IN TO WS-HOLD-PREVIOUS-LEAGUE-IN
MOVE TEAM-IN TO WS-HOLD-PREVIOUS-TEAM-IN
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
COMPUTE WS-AVERAGE ROUNDED = HITS-IN / AT-BATS-IN
MOVE LEAGUE-IN TO DL-LEAGUE
MOVE SPACES TO BLANK-A-OUT
MOVE TEAM-IN TO DL-TEAM
MOVE SPACES TO BLANK-B-OUT
MOVE NAME-IN TO DL-NAME
MOVE SPACES TO BLANK-C-OUT
MOVE HITS-IN TO DL-HITS
MOVE SPACES TO BLANK-D-OUT
MOVE AT-BATS-IN TO DL-AT-BATS
MOVE SPACES TO BLANK-E-OUT
MOVE WS-AVERAGE TO DL-AVERAGE-OUT
MOVE DETAIL-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT
AFTER ADVANCING 1 LINE
ADD 1 TO LINES-PRINTED
* CALCULATE FINAL TOTALS
COMPUTE WS-GRAND-HITS = WS-GRAND-HITS + HITS-IN
COMPUTE WS-GRAND-AT-BATS = WS-GRAND-AT-BATS + AT-BATS-IN
COMPUTE WS-GRAND-AVERAGE ROUNDED = WS-GRAND-HITS / WS-GRAND-AT-BATS.
* CALCULATE ZTL HERE
COMPUTE WS-TEAM-HITS = WS-TEAM-HITS + HITS-IN
COMPUTE WS-TEAM-AT-BATS = WS-TEAM-AT-BATS + AT-BATS-IN
COMPUTE WS-TEAM-AVERAGE ROUNDED = WS-TEAM-HITS / WS-TEAM-AT-BATS
* CALCULATE LTL HERE
COMPUTE WS-LEAGUE-HITS = WS-LEAGUE-HITS + HITS-IN
COMPUTE WS-LEAGUE-AT-BATS = WS-LEAGUE-AT-BATS + AT-BATS-IN
COMPUTE WS-LEAGUE-AVERAGE ROUNDED = WS-LEAGUE-HITS / WS-LEAGUE-AT-BATS
* CALCULATE LOW/HIGH AVERAGES
IF WS-AVERAGE > WS-HIGHEST-AVERAGE
MOVE WS-AVERAGE TO WS-HIGHEST-AVERAGE
END-IF
IF WS-AVERAGE < WS-LOWEST-AVERAGE
MOVE WS-AVERAGE TO WS-LOWEST-AVERAGE
END-IF.
300-WRITE-HEADINGS.
ADD 1 TO PAGE-NUMBER
MOVE PAGE-NUMBER TO HL-1-PAGE-NUMBER
MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT
IF WS-FIRST-TIME-THRU = 'YES'
WRITE BASEBALL-RECORD-OUT
MOVE 'NO' TO WS-FIRST-TIME-THRU
ELSE
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING PAGE
END-IF
MOVE HEADING-LINE-2 TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT
MOVE 1 TO LINES-PRINTED.
350-TEAM-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-HOLD-PREVIOUS-LEAGUE-IN TO ZTL-LEAGUE
MOVE WS-HOLD-PREVIOUS-TEAM-IN TO ZTL-TEAM
MOVE WS-TEAM-HITS TO ZTL-TEAM-HITS
MOVE WS-TEAM-AT-BATS TO ZTL-TEAM-AT-BATS
MOVE WS-TEAM-AVERAGE TO ZTL-TEAM-AVERAGE
MOVE TEAM-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED
MOVE WS-BLANK-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 1 LINES
ADD 1 TO LINES-PRINTED
MOVE ZEROS TO WS-TEAM-HITS
MOVE ZEROS TO WS-TEAM-AT-BATS
MOVE ZEROS TO WS-TEAM-AVERAGE.
375-LEAGUE-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-HOLD-PREVIOUS-LEAGUE-IN TO LTL-LEAGUE
MOVE WS-LEAGUE-HITS TO LTL-LEAGUE-HITS
MOVE WS-LEAGUE-AT-BATS TO LTL-LEAGUE-AT-BATS
MOVE WS-LEAGUE-AVERAGE TO LTL-LEAGUE-AVERAGE
MOVE LEAGUE-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED
MOVE WS-BLANK-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 1 LINES
ADD 1 TO LINES-PRINTED
MOVE ZEROS TO WS-LEAGUE-HITS
MOVE ZEROS TO WS-LEAGUE-AT-BATS
MOVE ZEROS TO WS-LEAGUE-AVERAGE.
400-TOTALS-ROUTINE.
IF LINES-PRINTED > 51
PERFORM 300-WRITE-HEADINGS
END-IF
MOVE WS-GRAND-HITS TO TL-GRAND-HITS
MOVE WS-GRAND-AT-BATS TO TL-GRAND-AT-BATS
MOVE WS-GRAND-AVERAGE TO TL-GRAND-AVERAGE
MOVE TOTALS-LINE TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES
ADD 2 TO LINES-PRINTED.
425-LOW-ROUTINE.
MOVE WS-LOWEST-AVERAGE TO TL-LOW-AVERAGE
MOVE LOW-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES.
450-HIGH-ROUTINE.
MOVE WS-HIGHEST-AVERAGE TO TL-HIGH-AVERAGE
MOVE HIGH-TOTALS TO BASEBALL-RECORD-OUT
WRITE BASEBALL-RECORD-OUT AFTER ADVANCING 2 LINES.