READE 字段键直到 EOF 在 RPGLE 的子文件中

问题描述

我一直无法获得完整的输出

据说输出应该是这样的

Actual Output I want

这是我的物理文件

New Currency exchange physical file

我在物理文件中有三个字段:

  • EXGDAT = 日期
  • EXGCOD = 交换代码
  • EXGRAT = 汇率

我尝试使用

          read    curexg
          dow     not %eof
   exgdat reade   curexg
          eval date = exgdat
          select
   exgcod  wheneq 'USD'
            move   exgrat   usd
   exgcod  wheneq 'GBP'
            move   exgrat   gbp
   exgcod  wheneq 'EUR'
            move   exgrat   eur     
   exgcod  wheneq 'AUD'
            move   exgrat   aud 
   exgcod  wheneq 'SGD'
            move   exgrat   sgd 
            endsl
   
            read curexg
            eval rrn = rrn + 1
            write sfl01
            enddo

这是输出Output

编译后,我将子文件中的值与物理文件中的值进行比较,对于 6 月 1 日,EUR 是错误的值。现在,据说 5 月 31 日和 6 月 1 日的记录都应该显示在子文件中。

我是否必须为 READE 执行另一个循环?我应该怎么办?请帮帮我

解决方法

首先,当您将 EXGCOD 与“usd”等值进行比较时,比较区分大小写。文件中的实际值为“USD”,因此您需要在 WHENEQ 操作码中编码“USD”。

但我认为主要的问题是您没有对通过 READ 或 READE 获得的每条记录都执行 SELECT。

第一个 READ 获取带有“USD”的记录。然后,在 DOW 循环开始时,您执行 READE 将获得“GBP”记录。因此,您将使用“GBP”记录执行第一个 SELECT,并且您的代码将看不到“USD”记录。然后在循环结束时,您执行另一个 READ 操作以获取“EUR”记录,但您没有不处理这条记录,因为接下来发生的是循环顶部的 READE,它获取 'AUD' 记录。循环末尾的 READ 获取 'SGD' 记录,然后是循环顶部的 READE循环的顶部尝试获取另一条记录,但它会得到文件结尾。但是您不会在 READE 之后检查文件结尾,因此它会处理“SGD”记录。最后,它会在循环结束,%EOF 将在 DOW 处为 *ON,因此循环将结束。

在循环结束时,您将处理英镑、澳元和新加坡元,但不会处理美元或欧元。

,

移动这个 eval rrn = rrn + 1 write sfl01 在你的循环之外,你应该很好

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...