1

我正在上 IBM iSeries 和 Rational Developer 的入门课程,我在为实验室编译我的一个 RPGLE 程序时遇到了困难……不幸的是,实验室只是我们应该编译的代码的演练,没有太多解释,所以我完全不知道我在做什么......

当我编译我的程序 MARKSRPG.RPGLE 时,我的大部分错误都是“未定义名称或指示符”......我不知道这是什么意思,我无法继续查看我是否编写了代码到目前为止工作。

(更新:我已经对建议进行了更正,现在我得到了不同的错误。“左右手边的类型在 EVAL 操作中不匹配”和“操作数与操作员。)

该程序分为两个文件:MARKSRPG.RPGLE 和 MARKSDSP.DSPF。这是两者的代码,但我的错误只显示在 MARKSRPG.RPGLE

MARKSDSP:

 A          R RECORD1
 A                                  1 33'Marks Calculator'
 A                                  2  2USER
 A                                  1  2SYSNAME
 A                                  1 72DATE
 A                                  4 24'Test 1:'
 A                                  5 24'Test 2:'
 A                                  6 24'Test 3:'
 A                                  7 24'Labs:'
 A                                  8 24'Exam:'
 A            TEST1          3  0B  4 32RANGE(0 100)
 A            TEST2          3  0B  5 32RANGE(0 100)
 A            TEST3          3  0B  6 32RANGE(0 100)
 A            LABS           3  0B  7 32RANGE(0 30)
 A            EXAM           3  0B  8 32RANGE(0 100)
 A            FIELD           T  B  2 71

 A          R RECORD2                   CA03(03 'Exit')
 A                                      OVERLAY
 A                                 10 23'Tests:'
 A                                 11 18'Final Mark:'
 A                                 12 17'Final Grade:'
 A            TESTOVRLL      3  0O 10 30
 A            NUMGRADE       3  0O 11 30
 A            GRADE          2X  O 12 30
 A                                 13 17'F3 - Exit' 

MARKSRPG:

  FMARKSDSP  CF   E             WORKSTN
 DLETGRADE         S              1A
 DTESTOVRLL        S              3A
  /FREE
       EXFMT RECORD1;
       DOW NOT(*IN03);
               EXSR GETGRADE;
               WRITE RECORD1;
               EXFMT RECORD2;
               IF *IN03= *OFF;
                 EXSR CLEARMARKS;
                 EXFMT RECORD1;
               ENDIF;
             ENDDO;
       *INLR = *ON;
       RETURN;
       BEGSR GETGRADE;
         LETGRADE = 'F';
         TESTOVRLL = (TEST1 + TEST2 + TEST3)/3;
         NUMGRADE = (TESTOVRLL/100*.30) + LABS +(EXAM/100*.35);
        ENDSR;
        BEGSR CLEARMARKS;
          TEST1 = 0;
          TEST2 = 0;
          TEST3 = 0;
          LABS = 0;
          EXAM = 0;
          TESTOVRLL = 0;
        ENDSR;
  /END-FREE  

如果您知道任何有用的学习 RPGLE 和 CLLE 的资源,我将不胜感激,任何额外的见解和帮助也会很棒!

谢谢。

4

1 回答 1

1

在您的 RPGLE 成员中,您的显示文件名称错误。你有MARKSRPG而不是MARKSDSP.

我也没有在任何地方看到 LETGRADE 定义,这应该在你的 D 规范中。

D LETGRADE           s            1a

我也没有看到CLEARMARKS任何地方定义的子例程。因为我也没有在任何地方看到 /end-free,所以我假设您没有为您的 RPGLE 成员粘贴所有代码。

进行我提到的这两个更改,然后返回任何问题。

以下是 IBM i 信息中心的链接:http: //publib.boulder.ibm.com/infocenter/iseries/v6r1m0/index.jsp ?topic=/rzasd/sc09250802.htm

于 2013-02-13T23:48:27.513 回答