我的输出没有显示在COBOL中

我的输出没有显示在COBOL中,cobol,Cobol,我的COBOL作业又有点问题了。我想一切都是这样的,但由于某种原因,当我运行我的程序时,我无法获得任何输出数据。它所做的只是显示空行,就像有人反复按回车键一样。这真的很糟糕,因为我看不出我是对还是错。这是我的密码: WORKING-STORAGE SECTION. 01 ARE-THERE-MORE-RECORDS PIC X(3) VALUE 'YES'. 01 LINE-COUNT PIC 99 VALUE ZERO

我的COBOL作业又有点问题了。我想一切都是这样的,但由于某种原因,当我运行我的程序时,我无法获得任何输出数据。它所做的只是显示空行,就像有人反复按回车键一样。这真的很糟糕,因为我看不出我是对还是错。这是我的密码:

   WORKING-STORAGE SECTION.
   01  ARE-THERE-MORE-RECORDS      PIC X(3)  VALUE 'YES'.

   01 LINE-COUNT                   PIC 99    VALUE ZEROS.

   01  WS-DATE.
       05  RUN-YEAR                PIC XX.
       05  RUN-MONTH               PIC XX.
       05  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(12) 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(6)   VALUE SPACES.
       05  PAGE-1                  PIC X(4)   VALUE 'PAGE'.

   01  HEADING-LINE-2.
       05                          PIC X(6)   VALUE 'LEAGUE'.
       05                          PIC X(3)   VALUE SPACES.
       05                          PIC X(4)   VALUE 'TEAM'.
       05                          PIC X(5)   VALUE SPACES.
       05                          PIC X(4)   VALUE 'NAME'.
       05                          PIC X(10)  VALUE SPACES.
       05                          PIC X(4)   VALUE 'HITS'.
       05                          PIC X(6)   VALUE SPACES.
       05                          PIC X(7)   VALUE 'AT BATS'.
   01  DETAIL-LINE.
       05 BLANK-A-OUT              PIC X      VALUE SPACES.
       05 DL-LEAGUE                PIC XX.
       05 BLANK-B-OUT              PIC X(3)   VALUE SPACES.
       05 DL-TEAM                  PIC X(3).
       05 BLANK-C-OUT              PIC X(3)   VALUE SPACES.
       05 DL-NAME                  PIC X(10).
       05 BLANK-D-OUT              PIC X(3)   VALUE SPACES.
       05 DL-HITS                  PIC ZZ9.
       05 BLANK-E-OUT              PIC X(3)   VALUE SPACES.
       05 DL-AT-BATS               PIC ZZ9.

   PROCEDURE DIVISION.
   100-MAIN.
       OPEN INPUT BASEBALL-FILE-IN
       OPEN OUTPUT BASEBALL-FILE-OUT

       ACCEPT WS-DATE FROM DATE
       MOVE RUN-MONTH TO MONTH-2
       MOVE RUN-DAY TO DAY-2
       MOVE RUN-YEAR TO YEAR-2
       WRITE BASEBALL-RECORD-OUT

       PERFORM UNTIL ARE-THERE-MORE-RECORDS = 'NO '
           READ BASEBALL-FILE-IN
               AT END
                   MOVE 'NO ' TO ARE-THERE-MORE-RECORDS
               NOT AT END
                   PERFORM 200-PROCESS-ONE-RECORD
           END-READ
       END-PERFORM

       CLOSE BASEBALL-FILE-IN
       CLOSE BASEBALL-FILE-OUT
       STOP RUN.


   200-PROCESS-ONE-RECORD.
       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
       WRITE BASEBALL-RECORD-OUT
           AFTER ADVANCING 2 LINES.

   300-LINE.
       IF  LINE-COUNT >= 50
           PERFORM 400-NEXT-PAGE
       END-IF
       WRITE BASEBALL-RECORD-OUT
           AFTER ADVANCING 1 LINE
       ADD 1 TO LINE-COUNT.

   400-NEXT-PAGE.
       WRITE BASEBALL-RECORD-OUT
           AFTER ADVANCING PAGE
       MOVE ZEROS TO LINE-COUNT.

我接触Cobol已经有一段时间了,但您可能错过了更新棒球记录的机会。

我接触Cobol已经有一段时间了,但您可能错过了更新棒球记录的机会。

您必须移动标题行1、标题行2,在你写Basketball-RECORD-OUT之前,必须将HEADING-LINE-1、HEADING-LINE-2和DETAIL-LINE移动到Basketball-RECORD-OUT。在你写Basketball-RECORD-OUT之前,你必须将HEADING-LINE-1、HEADING-LINE-2和DETAIL-LINE移动到Basketball-RECORD-OUT。

你永远不能将从Basketball-2.SEQ读取的数据移动到用于写Basketball-2.RPT的记录中

你可以这样做

* WRITE THE HEADER INFO
MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT 
WRITE BASEBALL-RECORD-OUT 

同样,您可以编写详细信息行

* WRITE THE DETAIL
MOVE DETAIL-LINE TO BASEBALL-RECORD-OUT 
WRITE BASEBALL-RECORD-OUT 

您从未将从BATTALE-2.SEQ读取的数据移动到用于写入BATTALE-2.RPT的记录中

你可以这样做

* WRITE THE HEADER INFO
MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT 
WRITE BASEBALL-RECORD-OUT 

同样,您可以编写详细信息行

* WRITE THE DETAIL
MOVE DETAIL-LINE TO BASEBALL-RECORD-OUT 
WRITE BASEBALL-RECORD-OUT 

编码COBOL I/O操作时,可以使用几种不同的模式。我看到两个 程序中的不同模式

模式1:

在FD条目下定义I/O记录布局。您已经对输入文件执行了此操作。 Basketball-RECORD-IN既可用作文件I/O缓冲区,也可用作完整记录描述

模式2:

定义一个虚拟FD记录缓冲区,然后在工作存储器下创建其他详细记录定义。 您这样做是为了您的输出记录。棒球记录输出只是一个I/O缓冲区和 详细记录布局在使用三种不同记录的工作存储下进行保护 布局:标题行1、标题行1和详图行

有什么区别?

主要区别在于这些记录何时可寻址以及如何读取/写入数据

当使用模式1时,只分配一个记录缓冲区。这是记录 与文件的FD子句关联。在您的例子中,这是36字节的棒球记录 记录此缓冲区在与之关联的文件打开之前可能无法寻址。企图 要访问此记录缓冲区(通过显式初始化它、将空格移动到它或任何其他引用),需要 导致运行时错误(崩溃和烧录)。打开并读取后,记录中的数据可用 与FD关联的缓冲区。由于此FD具有已定义的记录结构,您可以 发出READ语句后,立即引用其中的任何字段(例如NAME-in)

当使用模式2时,在工作存储器中声明单独的记录结构。这是记录 标题行1、标题行2和详图行均可寻址 当程序开始运行时-即使输出记录缓冲区为-record-OUT(关联 在打开输出文件之前,FD)将不可寻址。这里要记住的事情 记录缓冲区-record-OUT和工作区之间没有“自动”连接 存储记录标题-LINE-1、标题-LINE-2和详细信息-LINE-您必须明确地将数据从工作中移出 存储到记录缓冲区,使用如下方式:

 MOVE HEADING-LINE-1 TO BASEBALL-RECORD-OUT
 WRITE BASEBALL-RECORD-OUT
在每次写操作之前。或者,您可以从工作存储记录中写入,如下所示:

 WRITE BASEBALL-RECORD-OUT FROM HEADING-LINE-1
这只是做上述移动/写入操作的糖衣方式

这一解释应该让您清楚地知道,为什么READ会将数据直接放入一个完整的数据库中 fielded记录结构供参考,但写入需要某种附加移动

这是COBOL中可用的两种I/O模式。随着你对这门语言的了解越来越多
其他模式也应该出现。

编码COBOL I/O操作时,可能会使用几种不同的模式。我看到两个 程序中的不同模式

模式1:

在FD条目下定义I/O记录布局。您已经对输入文件执行了此操作。 Basketball-RECORD-IN既可用作文件I/O缓冲区,也可用作完整记录描述

模式2:

定义一个虚拟FD记录缓冲区,然后在工作存储器下创建其他详细记录定义。 您这样做是为了您的输出记录。棒球记录输出只是一个I/O缓冲区和 详细记录布局在使用三种不同记录的工作存储下进行保护 布局:标题行1、标题行1和详图行

有什么区别?

主要区别在于这些记录何时可寻址以及如何读取/写入数据

当使用模式1时,只分配一个记录缓冲区。这是记录 与文件的FD子句关联。在您的例子中,这是36字节的棒球记录 记录此缓冲区在与之关联的文件打开之前可能无法寻址。企图 要访问此记录缓冲区(通过显式初始化它、将空格移动到它或任何其他引用),需要 导致运行时错误(崩溃和烧录)。打开并读取后,记录中的数据可用 与FD关联的缓冲区。由于此FD具有已定义的记录结构,您可以 发出READ语句后,立即引用其中的任何字段(例如NAME-in)

当使用模式2时,在工作存储器中声明单独的记录结构。这是记录 标题行1、标题行2和详图行均可寻址 当程序开始运行时-即使输出记录缓冲区为-record-OUT(关联 在打开输出文件之前,FD)将不可寻址。这里要记住的事情 没有“自动”连接