RPG(二)

F行说明

首位填上F,然后按F4,会出现如下内容:

image-20200925141121727

Filename:

需要声明的文件名,必须顶格,文件名必须唯一,也就是程序中对同样的文件名不能声明两次。

File Type:

声明文件的处理类型。必须填写。允许的选项有:
I: 输入型,即只读文件,对声明的文件只取其记录的值,不对记录进行修改
U: 修改型,即对声明的文件进行修改操作(删除记录属于修改操作的一种)
O: 输出型,即只写,对声明的文件只进行写操作。
C: 混合型,用于对屏幕文件的定义。(混合型,即输入/输出型,以屏幕文件为例,也就是读取屏幕文件的一些输入字段信息,同时也可以输出一些字段的值到屏幕文件中,但不能对屏幕文件自身进行修改,所以与上面的U 是有区别的)

File Designation:

文件的指定方式,允许的选项有:
当“File Type”为I,U,C 时,这里填“F”(百分之90都是f)
当“File Type ”为O 时,这里不填写

End of File:

程序结束前,对记录的处理方式。可以不填,或填“E”。似乎不填,表示在程序结束前,要处理所有文件的所有记录(含LF);填E,表示只处理这个文件的所有记录.总之,此项一般是不填

File Addtion:

是否会增加文件中的记录,即是否会对文件进行写操作。
可以不填,或填“A”
当File Type 为“O”时,系统自动默认此项为“A”,不必填写;
当File Type 为“I”,或“U”时,这项内容可以填“A”,也可以不填。不填,即表示不会增
加文件中的记录,也就是没有写操作;填“A”时,即表示会增加文件中的记录,也就是会对文件进行写操作。

Sequence:

针对cycle 使用的,表示排序顺序。
当定义为非cycle 文件时,即“File Designation”项非“P”、“S”时,此项必须为空;
当定义为cycle 文件时,即“File Designation”项为“P”、或“S”时,此项可填空、A、D。
A 表示升序,D 表示降序。
因为CYCLE 现在已不常用,所以通常不填

File Format:

文件格式,不能为空,允许的值有:
E: 声明的文件,是外部描述的文件(即文件在程序运行之前就已存在)
F: 声明的文件,是一个程序描述文件
这里通常填“E”,即为外部描述文件

Record Length

“File Format”为“F”时,才需要填写。
通常不填

Limit Processing

通常不填。

Length of Key Field

查询时,索引键值的长度
如果“File Format”项等于“E”,即外部描述文件时,此项不填
如果“File Format”项等于“F”,便不需要按KEY 值查询时,此项也不填
如果“File Format”项等于“F”,需要按KEY 值查询时,此项填写KEY 值的长度

因为一般都使用外部描述文件,所以这里一般都不填写。

Record Address Type

记录寻址类型,好象是对文件键值的描述。允许的值如下:
空:不使用KEY 值,在程序段中,不会对文件的查询定位操作,如“SETLL”、“CHAIN”操作
码都不会用的时,该项填空。
K: 使用KEY 值,即表示会对声明的文件进行查询定位操作,此时声明的文件必须有键值,即
必须为逻辑文件(LF 文件),或在生成文件时,已加入了KEY 值。
(下面的选项应该是程序描述文件才会使用)
A: KEY 值为字符型
D:KEY 值为日期型
F:KEY 值为数字型
G:KEY 值为非英文字符
P:KEY 值为压缩型数字
T:KEY 值为时间型
Z:KEY 值为timestamp
总之,如果要按照键值对声明的文件进行查询定位操作(即程序中使用了CHAIN、SETLL 操作码,
则此项需要填写“K”;如不需要进行查询操作,则不填。),此项填“K”时,声明的文件必须含
有KEY 值。

File Organization

一般不填

Device

声明文件的存放位置,必须填写,允许的值有:
DISK: 磁盘文件,即文件存储在磁盘上,最常见的;
PRINTER: 打印文件,提供打印输出描述,以及对打印设备访问。打印报表用这个;
WORKSTN: workstation,工作站,显示文件。屏幕文件(DSPF)的定义用这个值

Keyword

可以不填,常用的值有(这里只列出几个常用的):
COMMIT
该文件记录的数据操作进行日志处理 事务 strcmtctr cmt
RENAME
对文件记录格式名进行重命名。比如说程序中需要同时声明PFFHSL1,PFFHSL2这两个逻辑
文件。这两个逻辑文件的记录格式名都是一样(通常和PF 一样,即都为FMTFHS;不过也可以定
义成不同。如果不同,当然就不需要使用RENAME 键字了)。那么,为了能让系统区分,就必须
对其中一个的记录格式名进行重命名。RENAME的语法:RENAME(旧记录格式名:新记录格名),

如下:

1
2
FPFFHSL1 IF E DISK  
FPFFHSL2 IF E DISK RENAME(FMTFHS:FMTFHS2)

新记录格式可以自由定义,只要在该程序中无同名的即可。RENAME 并不会真正的更改文
件的记录格式名,仅是在当前运行程序中进行重命名。对同时运行的其它程序无影响
USROPN
对于声明的文件,由用户自行打开。如果不填写此关键字,系统将会在程序最最开始(执行第一句C 行语句前),自动执行“OPEN 文件” 的操作,在程序结束后,自动执行“CLOSE文件”的操作。而填写此关键字之后,OPEN,CLOSE 的操作将由用户在C 行程序段中,自行处理。如果用户未执行OPEN 操作,就执行CHAIN、READ、SETLL 等语句,在编译程序时就会报错。程序在结束之前,必须关闭所有已打开的文件,所以用起来会比较繁琐。USROPN 常作用于对文件的解锁,在同一程序中打开同一文件的不同MEMBER 等,属于一个较高级的用法,可在实际操作中慢慢体会。OPEN,CLOSE 的操作码,对应的是文件名,不是记录格式名。即
C OPEN PFFHSL1
C CLOSE PFFHSL1
而不是
C OPEN FMTFHS

Comment

注释说明。源自RPG,在RPG 中是有作用的,可以对程序作简短的说明,但在RPGLE
中,其实已经没有作用了,此项不用填。(填了也没用)

常用例子

对文件进行只读的声明:
FPFFHS IF E DISK

对文件进行修改的声明:
FPFFHS UF E DISK

对文件进行只写的声明:
FPFFHS O E DISK

对文件进行修改,以及增加记录的操作:
FPFFHS UF A E DISK

对文件进行查询,增加记录的操作,并对文件进行查询操作:
FPFFHSL1 IF A E K DISK

声明两个记录格式相同的文件,并对其中之一进行重命名
FPFFHSL1 IF E K DISK
FPFFHSL2 IF E K DISK RENAME(FMTFHS:FMTFHS2)

注:在声明时,两个文件不一定要上下紧接着;随便改哪一个文件对应的记录格式
都可以;新旧记录格式名用冒号隔开,新记录格式名可自行定义,无规则。
对文件的修改操作进行日志处理:
FPFFHSL2 UF E K DISK COMMIT

cycle 类文件的声明:
FPFFHSL2 IP E K DISK
这样文件声明为P 之后,程序中不需要写循环读文件,也不需要写RETURN,设指示器INLR,
也就是
FPFFHSL2 IP E K DISK
C READ 记录格式名
等价于
FPFFHSL2 IF E K DISK
C DOW 1 = 1
C READ 记录格式名 EQ 指示器
C IF EQ指示器=’1’
C LEAVE
C ENDIF
C ENDDO
C RETURN