ACQ{(E)}(Acquire) 取地址位
--------------------------------------------------------------------------------------------------------------------------
ADD{(H)}(Add) 加法操作
ps:a add b c 变量a加上变量b赋值给变量C
--------------------------------------------------------------------------------------------------------------------------
Adddur{(E)}(Add Duration) 日期时间相加
ps:a addur 3:*D b 在a日期上加上3天赋值到b
*D表示天,*M表示月,*Y表示年
--------------------------------------------------------------------------------------------------------------------------
Begsr(beginning of subroutine)子过程开始出
ps: begsr 子过程名
....
endsr
-------------------------------------------------------------
call{(E)} (call a program) 调用外部程序
ps: call 外部程序名(加入外部程序名加单引号的话就直接调用这个外部程序,加入没有加入单引号就表示call的是一个变量名,当变量名的值为XXX时,调用的就是XXX程序)
--------------------------------------------------------------------------------------------------------------------------
CASXX(conditionally invoke subroutine)带条件的调用子过程
ps:XX可选值为:EQ(=),NE(<>),GT(>),LT(<),GE(>=),LE(<=)
ps: a caseq '1' sub01
a caseq '2' sub02
cas sub03
endcs
表示当a=1的时候表用sub01这个子过程,当a=2的时候调用sub02,当都不等于的时候调用sub03这个子过程
类似于 select
when a='1'
exsr sub01
when a='2'
exsr sub02
other
exsr sub03
endsl
--------------------------------------------------------------------------------------------------------------------------
cat{(p)}(concatenate two character strings)字符连接
基本语法:a cat b:0 c 表示。。 将b拼在a的后面,0代表中间每空格,同理1的话代表中间有一个空格,3就是3个空格
注意cat的时候a假如后面有空格会自动去除
ps:不考虑空格的情况下eval c=a+b等同于上面语法
--------------------------------------------------------------------------------------------------------------------------
CHAIN{(N|E)}(Random retrieval from a file) 按键值对文件记录进行查询定位 HI LO EQ
ps:变量名(该变量名必须与逻辑文件的key类型,长度都相同) CHAIN 记录格式 17 18
17,18 代表指示器(0-99之间),hi指示器表示是否查询到相应记录,查询不成功时打开hi指示器
LO指示器表示查询时,文件是否被锁,文件被琐时,打开lo指示器;*IN17=‘0’表示查到了记录
--------------------------------------------------------------------------------------------------------------------------
CLEAR(clear) 清除内容
基本语法:clear 目标名(可以是结构,文件的记录格式名)
--------------------------------------------------------------------------------------------------------------------------
CLOSE{(E)}(close files) 关闭文件
基本语法 close 目标文件名(只是文件名不是记录格式名)
close只适用于声明文件时,keyword使用‘usropn’ 关键字的文件,
每一个close操作前面都必须有一个open文件的操作
close *ALL 表示关闭前面所有open的文件
--------------------------------------------------------------------------------------------------------------------------
COMMIT{(E)}(Commit)日志食物处理的确认操作
基本语法:commit 没其他参数,是指对事务处理进行确认操作
--------------------------------------------------------------------------------------------------------------------------
DEfine(Field Definition) 根据已知字段老定义新字段
ps: *like define a b
变量b的类型跟a一样
--------------------------------------------------------------------------------------------------------------------------
delete{(E)}(DELETE RECORED)删除当前记录
基本语法:delete 文件记录格式名
是用delete之前必须先定位到具体记录上(chain,read等)同时在F声明时必须是用修改的方式声明
--------------------------------------------------------------------------------------------------------------------------
do(Do) 循环
基本语法 do 10
循环中处理的内容
enddo
上面的意思表示循环10次,也可以用整数型参数来表示循环的次数
--------------------------------------------------------------------------------------------------------------------------
DOU{(M|R)}(do until) 当满足factory2条件是跳出循环
基本语法 dou a>b
处理过程
enddo
--------------------------------------------------------------------------------------------------------------------------
dow{(M|R)}(do while)与dou相反他是只有满足factory2的时候才进入
--------------------------------------------------------------------------------------------------------------------------
if,else,elseif,endif逻辑判断语句(同其他语言相同)
--------------------------------------------------------------------------------------------------------------------------
endyy(end a structured group)
endif 对应 if,ifxx
endsr 对应 begsr
enddo 对应 do,dow,dou,douxx,dowxx
endsc 对应 casxx
endsl 对应 select
endfor对应 for
--------------------------------------------------------------------------------------------------------------------------
endsr子过程结束语句
--------------------------------------------------------------------------------------------------------------------------
eval{(H|M|R)}(evaluation) 赋值语句
基本语法eval a=b 把等号右边赋值给等号左边、
--------------------------------------------------------------------------------------------------------------------------
EXFMT{(E)}(Write/then read format)显示屏幕文件并等待输入
ps:EXFMT 记录格式名
--------------------------------------------------------------------------------------------------------------------------
Exsr(Invoke subroutine) 执行子过程
ps:EXSR 子过程名
--------------------------------------------------------------------------------------------------------------------------
Extrct{(E)}(Extract Date/Time)取日期,时间型变量中的具体内容
ps:首先必须有一个事件或日期变量,且变量必须有值
extrct FLD01:*Y fldyear fld01 是日期变量。 注意定义的赋值变量必须和你要拿的变量长度相同;
--------------------------------------------------------------------------------------------------------------------------FOR 循环
--------------------------------------------------------------------------------------------------------------------------
GOTO(Go to) 跳转语句
TAG(tag) 定义标签
跳转到指定的标签处,需要用TAG来定义,
ps: fhstag TAG
goto fhstag
--------------------------------------------------------------------------------------------------------------------------
if 条件判断
--------------------------------------------------------------------------------------------------------------------------
iter(iterate) 循环中,不处理此语句之后的语句
ps:相当于countinue
--------------------------------------------------------------------------------------------------------------------------
KList (define a composite key)
KFLD( define parts of a key)定义组合键值中的字段
ps: Factory1 operation factory2 result
fhskey klist //定义组合键fhskey
kfld fld01 //组合键的首个字段为fld01
kfld fld02 //组合键的第二个字段fld02
是用klist的方法是如下
fhskey chain fmtfhs(记录格式名,也可以是逻辑文件名字Pffhsl3)
fhskey stell fmtfhs
意思是按照这个组合键值查询定位到逻辑文件pffhsl3中去
--------------------------------------------------------------------------------------------------------------------------
lookup(look up a table or array element)对数组的查询定位
ps:先定义一个数组并赋值
array(1) = '0001'
array(2) = '0002'
array(3) = '0003'
factory1 operation factory2 result HI LO EQ
Eval N=1
'0002' lookup array(N) 54
array(N)表示从数组的第N条开始检索,。检索条件为'0002',EQ指示器:当找到记录时打开指示器即:*IN54=‘1’,当未找到记录时指示器处于关闭状态,*IN54=‘0’
--------------------------------------------------------------------------------------------------------------------------
MOVE(move) 赋值语句
factory1 operation factory2 result HI LO EQ
MOVE FLD01 FLD02
允许在move的过程中对result字符进行定义,move是右赋值
MOVEL 是左对齐
--------------------------------------------------------------------------------------------------------------------------
MOVEA{(P)}(Move array) 数组赋值
ps: dimdata(1)='01'
dimdata(2)='02'
dimdata(3)='03'
factory1 operation factory2 result HI LO EQ
MOVEA *BLANK dimdata
这样数组就清空,或者movea fld01 dimdata 后,数组的值将是如下:
dimdata(1)='AB'
dimdata(2)='CD'
dimdata(3)='EF'
--------------------------------------------------------------------------------------------------------------------------
OPEN{(E)}(OPEN File for prcessing) 打开文件
factory1 operation factory2 result HI LO EQ
open 文件名
文件名必须是已经声明的文件名(不是文件的记录格式名)并且在open之后,程序关闭之前必须有对应的close操作
使用open操作,文件在声明时,必须使用USROPN关键字
--------------------------------------------------------------------------------------------------------------------------
Select(begin a select group) 分支语句
when{(M|R)}(when) 分支判断语句中的条件判断
OTHER(Otherwise select) 分支语句的判断
ps: factory1 operation factory2 result HI LO EQ
select
when 条件判断1
处理语句1
when 条件判断2
处理语句2
Other
处理语句3
endsl
--------------------------------------------------------------------------------------------------------------------------
Plist(Identify a parameter List)定义集合
Parm(Identify parameters) 定义入口参数
ps: factory1 operation factory2 result HI LO EQ
*Entry Plist
Parm PLD01
--------------------------------------------------------------------------------------------------------------------------
READ{(N|E)}(Read a Record)读取记录
ps: factory1 operation factory2 result HI LO EQ
read 文件记录格式名 45 46
Read后面跟的必须是文件记录格式名:
LO指示器表示锁定指示器,当在指定时间需要读取的记录仍然被锁,将会打开LO指示器,既*IN45=‘1’;
EQ指示器为是否读到指示器,当未读到任何记录时,打开EQ指示器,*IN46='1';
当文件在程序中,是用只读声明时,read操作并不会造成锁表.用修改声明时,该记录会被锁,知道执行unlock或updata,或read该文件的其他记录才会解锁;
如果该文件在修改声明时,但是希望read的时候不照成锁表,可以用read(N)使用,但是同时也不能修改记录,如果需要修改记录,就必须对该记录进行一次chain或者read操作,
注意:如果要修改记录,就必须先锁住当前记录
--------------------------------------------------------------------------------------------------------------------------
stell-read 定位读取
stell-reade 定位判断是否相同读取
setGT-readp 定位到最后一条 在从最后一条往上读取
setGT-readpe 定位到最后一条。在从最后一条往上读取符合条件的记录
--------------------------------------------------------------------------------------------------------------------------
Reset{(E)}(reset)
将数据结构恢复到初始值,假如没有初始值的情况下,数字默认为0,字符默认为空;
--------------------------------------------------------------------------------------------------------------------------
Return{(H|M|R)}(return to caller)
程序结束
--------------------------------------------------------------------------------------------------------------------------
ROLBK{(E)}(Roll Back)
回滚
--------------------------------------------------------------------------------------------------------------------------
SCAN{(E)}(Scan Character string) 扫描字符串
ps: factory1 operation factory2 result HI LO EQ
FLD01 SCAN FLD02 N 26
判断FLD02在FLD01里面是否存在,假如存在打开*IN26='1'指示器,并给N赋值该位置,假如不存在*IN26='0'
--------------------------------------------------------------------------------------------------------------------------
SetGT{(E)}(Set Greater Than) 定位操作-大于
定位在符合条件的最下面;
--------------------------------------------------------------------------------------------------------------------------
stell{(E)}(Set lower limit)定位操作-小于
定位在符合条件的上方
--------------------------------------------------------------------------------------------------------------------------
Unlock{(E)}(Unlock a data area or release a record) 解锁
factory1 operation factory2 result HI LO EQ
Unlock 文件记录格式名
--------------------------------------------------------------------------------------------------------------------------
Update(modify existing record) 修改记录
factory1 operation factory2 result HI LO EQ
Update 文件记录格式名
ps:update 操作必须是在read到一条数据之后才能执行,还有该数据必须是已经被锁定,
--------------------------------------------------------------------------------------------------------------------------
Write(create new records)写记录
常用方式:
Factory1 operation factory2 result HI LO EQ
Clear 文件记录格式名
eval 文件字段1=xxxx
eval 文件字段2=xxxx
write 文件记录格式名
ps:文件必须声明为可写的;
--------------------------------------------------------------------------------------------------------------------------
*all 全部
eval FLD01=*ALL'0' 变量FLD01全部赋值为0
Close *All 关闭所有文件
--------------------------------------------------------------------------------------------------------------------------
%Len 取字符串长度:
ps:(MYLEN为数字型变量,FLD01为字符型变量)
EVAL MYLEN=%len(FLD01)
这样拿到的就是变量fld01的总长度,当它的长度为2,就算没有值 他的长度也是2
所以一般情况下我们是和%trim或者%trimr一起用,例如
EVAL MYLEN=%len(%trimr(fld01))