在RPGLE中替换主文件

时间:2017-11-02 14:29:45

标签: file rpgle rpg

是否有人有从RPG程序替换主文件的经验,该程序已定义级别指标(用于计算目的的级别指标)?

而不是RPG循环,我需要引入新文件(替换主文件),它将被定义为完全过程文件(不再是主文件)..

感谢。

1 个答案:

答案 0 :(得分:3)

为什么要停止使用主文件?进行自己的比较以模拟级别指标可能比对主文件进行更改要多得多。

通常,要使用完整过程文件替换主文件,请将READ + DOW而不是%EOF(primaryfile)放在计算的顶部,并将第二个READ和ENDDO放在计算结束时。< / p>

对于第7列和第8列中的水平指示器L0,L1等的计算,我首先将这些计算移动到子程序中,现在称它们为L0_subr,L1_subr等。

要处理与先前记录的比较,在第一次READ之后,在DOW之前,添加语句以保存级别指示符字段的当前值。在计算结束时,在第二次READ之前,添加语句以将当前值与保存的值进行比较,如果它们不同,则调用相关的Lx_subr(s)。在调用所有Lx_subrs之后,更新该特定级别指示符的已保存值。

进行这种改变很容易出错。我会将其作为主文件保留,并在必要时为I规格添加额外的级别指示器。

2017-11-06从这里开始更新:

要启用跟踪上一条记录和当前记录,请使用可以读入数据结构的功能。

read rec cur_ds; 
dow not %eof;
    ... 
    if have_prv_ds; 
      compare the previous record to the current record 
    endif; 
    eval-corr prv_ds = cur_ds; 
    have_prv_ds = *on; 
    read rec cur_ds; 
enddo; 

由于READ不会影响与文件关联的独立字段,因此避免意外引用这些独立字段的良好做法是避免定义独立字段。为此,请使用QUALIFIED关键字定义文件。然后,您将使用file.fmt引用记录格式,并且与该文件关联的字段将不存在。

dcl-f myfile qualified;
dcl-ds cur_ds likerec(myfile.fmt);
dcl-ds prv_ds likerec(myfile.fmt);

read myfile.fmt cur_ds; 
dow not %eof(myfile);
    ... 
    if have_prv_ds; 
      compare the previous record to the current record 
    endif; 
    eval-corr prv_ds = cur_ds; 
    have_prv_ds = *on; 
    read myfile.fmt cur_ds; 
enddo;