替换RPGLE中的主文件
Replacing Primary file in RPGLE
有没有人有从 RPG 程序替换主文件的经验,其中定义了级别指示器(用于计算目的的级别指示器)?
代替 RPG 循环,我需要引入新文件(替换主文件),它将定义为完全程序文件(不再有主文件)..
谢谢。
为什么要停止使用主文件?自己进行比较以模拟水平指示器可能比对主文件进行更改要多得多。
一般来说,要用完整程序文件替换主文件,将 READ + DOW 而不是 %EOF(primaryfile) 放在计算的顶部,并将第二个 READ 和 ENDDO 放在计算的末尾.
对于第 7 列和第 8 列中水平指示器 L0、L1 等的计算,我会先将这些计算移动到子程序中,现在将它们称为 L0_subr、L1_subr 等。
为了处理与先前记录的比较,在第一个 READ 之后,DOW 之前,添加语句以保存级别指示器字段的当前值。在计算结束时,在第二次READ之前,添加语句将当前值与保存值进行比较,如果不同,则调用相关的Lx_subr(s)。在调用所有 Lx_subr 之后,更新该特定级别指示器的保存值。
进行这种更改很容易出错。如果需要,我会将其保留为主要文件并在 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;
有没有人有从 RPG 程序替换主文件的经验,其中定义了级别指示器(用于计算目的的级别指示器)?
代替 RPG 循环,我需要引入新文件(替换主文件),它将定义为完全程序文件(不再有主文件)..
谢谢。
为什么要停止使用主文件?自己进行比较以模拟水平指示器可能比对主文件进行更改要多得多。
一般来说,要用完整程序文件替换主文件,将 READ + DOW 而不是 %EOF(primaryfile) 放在计算的顶部,并将第二个 READ 和 ENDDO 放在计算的末尾.
对于第 7 列和第 8 列中水平指示器 L0、L1 等的计算,我会先将这些计算移动到子程序中,现在将它们称为 L0_subr、L1_subr 等。
为了处理与先前记录的比较,在第一个 READ 之后,DOW 之前,添加语句以保存级别指示器字段的当前值。在计算结束时,在第二次READ之前,添加语句将当前值与保存值进行比较,如果不同,则调用相关的Lx_subr(s)。在调用所有 Lx_subr 之后,更新该特定级别指示器的保存值。
进行这种更改很容易出错。如果需要,我会将其保留为主要文件并在 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;