rpgle - READE 字段键直到 EOF 在 RPGLE 的子文件中
问题描述
我坚持要获得完整的输出。
据说输出需要看起来像这样
这是我的物理文件
我在物理文件中有三个字段:
- 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
这是输出: 输出
编译后,我将子文件中的值与物理文件中的值进行比较,对于 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 之后不检查文件结尾,因此它将处理“SGD”记录。最后,它会在循环结束,
在循环结束时,您将处理 GBP、AUD 和 SGD,但不会处理 USD 或 EUR。
推荐阅读
- ios - 委托方法 UIDocumentPickerViewController 在模拟器上不起作用
- openssl - OpenSSL:如何从 RFC3161 时间戳回复中提取证书和令牌状态?
- android - 从 Uri 检索位图有时为空
- javascript - 脚本在乘法中包含单位
- rust - 如何在不消耗迭代器 int rust 的情况下获取元素(在 rust 中重写 strtol 的问题)
- python - 删除字符串列表中每个项目中的重复项
- python - ImageDataGenerator 拟合模型时的形状问题
- sql - SQL 从标志中获取 2 个相邻的操作
- regex - 如果 url 包含 fbclid 参数并删除它,如何通过 htaccess 重定向到 https
- reactjs - React Navigation,如何测试 Navlink 的路径?