如何将新记录的值从子文件移动到 RPGLE 中的物理文件?

How to MOVE VALUE OF A NEW RECORD ADDED from subfile to physical file in RPGLE?

如何将从 SUBFILE 添加的新记录的值移动到物理文件?

数值如下图所示:

CUREXG 是我的物理文件名(pf),CURREC 是我的记录名。我的 pf 看起来像这样:

如何将值分离到物理文件中? 我应该怎么办?请帮我。 提前致谢

每个货币记录存储单个货币代码和日期的货币汇率。所以你必须写多条记录。每个货币代码一个。

 \free
      exgdat = date ;
      exgcur = 'USD' ;
      exgamt = usd ;
      write  currec ;
 \end-free

尝试使用SQL。它内置于系统中。并使代码更具可读性。

   exec sql
   insert into  exgrat  ( exgdat, exgcur, exgamt )
   values( :date, 'USD', :usd ) ;

RockBoro 建议的蛮力方法可以工作,但有很多重复代码。减少重复代码的一种方法(DRY原则)是使用数组重新定义显示文件记录结构。虽然你没有给我们显示文件记录的 DDS,但我猜记录格式看起来像这样:

dcl-f DSPF    Workstn Qualified;
dcl-ds rec    LikeRec(DSPF.screen: *all) Inz;

其中5个利率相继下跌。你可以像这样在上面叠加一个数组:

dcl-s rates   Like(rec.usd3) dim(5) based(pRates);
dcl-s pRates  Pointer Inz(%addr(rec.usd3));

阅读屏幕后只需循环查看比率并写入物理文件:

exfmt DSPF.screen rec;
for ix = 1 to %elem(rates);
  exgdat = rec.date;
  exgcod = exccd(ix);
  exgrat = rates(ix);
  write currec;
endfor;

您还需要一个编译时数组 exccd 来按照它们在显示文件中出现的顺序保存交换代码,以实现此目的。