问题描述
我一直无法获得完整的输出。
据说输出应该是这样的
这是我的物理文件
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
编译后,我将子文件中的值与物理文件中的值进行比较,对于 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
在你的循环之外,你应该很好