首页 > 解决方案 > READE 字段键直到 EOF 在 RPGLE 的子文件中

问题描述

我坚持要获得完整的输出。

据说输出需要看起来像这样

我想要的实际输出

这是我的物理文件

新币兑换实物文件

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

我尝试使用

          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

这是输出: 输出

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

我必须为 READE 做另一个循环吗?我应该怎么办?请帮我

标签: rpgle

解决方案


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

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

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

在循环结束时,您将处理 GBP、AUD 和 SGD,但不会处理 USD 或 EUR。


推荐阅读