【问题标题】:COBOL Sequential file I/OCOBOL 顺序文件 I/O
【发布时间】:2021-09-28 17:02:19
【问题描述】:

我正在创建一个程序,它读取包含一些学生信息的输入文件,然后将其输出到终端和输出文件。 我还需要根据获得的小时数和质量分数来计算 GPA。

我收到错误:

P2.cob: 46: error: PICTURE clause required for 'outRecord'
P2.cob: in paragraph 'ProcessData':
P2.cob: 81: error: 'CUMULATIVE-QP' is not a numeric value
P2.cob: 84: error: 'CUMULATIVE-QP' is not a numeric value
P2.cob: 87: error: 'CUMULATIVE-QP' is not a numeric value
P2.cob: 90: error: 'CUMULATIVE-QP' is not a numeric value

任何帮助/提示都会有很大帮助。我的输入文件示例和代码附在下面:

MICHAEL RICHARDSON W1234567 FALL2019 CMPS141 INTRO TO JAVA             A 3.00 12.00
MICHAEL RICHARDSON W1234567 FALL2019 ENGL101 FRESHMAN COMPOSITION      B 3.00 09.00
MICHAEL RICHARDSON W1234567 SPNG2020 CMPS220 OPERATING SYSTEMS         A 3.00 12.00
MICHAEL RICHARDSON W1234567 SPNG2020 ENGL102 CRITICAL READING AND WRIT A 3.00 12.00
IDENTIFICATION DIVISION.
PROGRAM-ID.  P2.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT myInFile  ASSIGN TO "P2In.dat".
    SELECT myOutFile ASSIGN TO "P2Out.dat".
DATA DIVISION.
FILE SECTION.
FD myInFile.
01 RecordDetails.
   03 StudentDetails.
      05 STUDENT-NAME        PIC X(16).
      05 STUDENT-ID          PIC X(9).
   03 SemesterDetails.
      05 SEMESTER            PIC X(9).
   03 ClassDetails.
      05 CLASS-NAME          PIC X(34).
      05 GRADE               PIC X(2).
   05 HOURS.
      07 HOURS-9             PIC 9.99.
   05 FILLER                 PIC X(2).
   05 POINTS.
      07 POINTS-X            PIC X(1) OCCURS 5.
   05 POINTS-9-99 REDEFINES POINTS.
      07 POINTS-9-99        PIC 9.99.
   05 POINTS-99-99 REDEFINES POINTS.
      07 POINTS-99-99       PIC 99.99.
01 CalculatedValues.
   05 CUMULATIVE-GPA-IN      PIC 99v99 VALUE ZERO.
   05 CUMULATIVE-QP-IN       PIC 99v99 VALUE ZERO.
   05 CUMULATIVE-HOURS-IN    PIC 99v99 VALUE ZERO.

FD myOutFile.
01 outRecord.

WORKING-STORAGE SECTION.

01 SWITCHES.
    05 EOF-SWITCH           PIC X VALUE "N".
01 COUNTERS.
    05 REC-COUNTER          PIC 9(3) VALUE 0.
01 CUMULATIVE.
    05 CUMULATIVE-QP        PIC ZZ.99.

PROCEDURE DIVISION.
Main.
    PERFORM Begin.
    PERFORM ProcessData.
    PERFORM PrintLines
            UNTIL EOF-SWITCH = "Y".

Begin.
    OPEN INPUT myInFile
    OPEN OUTPUT myOutFile

    READ myInFile
            AT END
                    MOVE "Y" TO EOF-SWITCH
            NOT AT END
                    COMPUTE REC-COUNTER = REC-COUNTER + 1
    END-READ.

ProcessData.
    READ myInFile
    AT END
            MOVE "Y" TO EOF-SWITCH
    NOT AT END
            IF GRADE = 'A'
                    COMPUTE CUMULATIVE-QP = CUMULATIVE-QP + 4
            ELSE
            IF GRADE = 'B'
 COMPUTE CUMULATIVE-QP = CUMULATIVE-QP + 3
            ELSE
            IF GRADE = 'C'
                    COMPUTE CUMULATIVE-QP = CUMULATIVE-QP + 2
            ELSE
            IF GRADE = 'D'
                    COMPUTE CUMULATIVE-QP = CUMULATIVE-QP + 1
            END-IF.

PrintLines.

    READ myInFile
    AT END
            MOVE "Y" TO EOF-SWITCH

    NOT AT END
            DISPLAY CUMULATIVE-QP
    END-READ.

【问题讨论】:

    标签: ubuntu cobol


    【解决方案1】:
    P2.cob: 46: error: PICTURE clause required for 'outRecord'
    

    就像@Slapout 提到的那样,您需要告诉编译器您希望如何格式化输出。 但是你实际上并没有使用myOutFile,所以也许你现在可以跳过FDopen语句。

    P2.cob: in paragraph 'ProcessData':
    P2.cob: 81: error: 'CUMULATIVE-QP' is not a numeric value
    P2.cob: 84: error: 'CUMULATIVE-QP' is not a numeric value
    P2.cob: 87: error: 'CUMULATIVE-QP' is not a numeric value
    P2.cob: 90: error: 'CUMULATIVE-QP' is not a numeric value
    

    CUMULATIVE-QP 的图片是 PIC Z9.99,这是一个“数字编辑”变量。这些很适合显示某些内容,但您不能使用数字编辑变量进行计算。

    你想要的是两个数据项:

    • 用于存储累积 QP 并用于计算
    • 一个显示累积QP

    当你想显示累积的 QP 时,你可以 MOVE 数字变量到数字编辑变量,然后 DISPLAY 那个。

    也许(在用pic 99v99 定义display-qp 之后):

               move cumulative-qp to display-qp
               display display-qp
    

    【讨论】:

      【解决方案2】:

      你的第一个错误是:

      'outRecord' 需要 PICTURE 子句

      这告诉您,在您的 FD for outRecord 中,您没有定义 PIC 子句:

      FD myOutFile.
      01 outRecord.
      

      编译器需要知道你的输出文件的布局。

      【讨论】:

        猜你喜欢
        • 2016-08-07
        • 2017-02-27
        • 2012-04-16
        • 2012-05-01
        • 2010-12-25
        • 2012-11-05
        • 1970-01-01
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多