如何修复Cobol程序中的排序问题?

如何修复Cobol程序中的排序问题?,cobol,Cobol,我有一个程序,假设它对输入文件(seq)进行排序,然后输出一个RPT文件 这个程序代码应该是正确的,问题应该只在这个程序的排序 问题:程序成功地对数据进行了正确排序,我的问题是,排序后的文件无法继续格式化并进行计算 请:在代码中显示并解释,这是我第一次尝试对文件进行排序 序号: 节目: IDENTIFICATION DIVISION. PROGRAM-ID. BASEBALL-5. * Tate ****************************************

我有一个程序,假设它对输入文件(seq)进行排序,然后输出一个RPT文件

这个程序代码应该是正确的,问题应该只在这个程序的排序

问题:程序成功地对数据进行了正确排序,我的问题是,排序后的文件无法继续格式化并进行计算

请:在代码中显示并解释,这是我第一次尝试对文件进行排序

序号:

节目:

   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.