Progress语言讲解.docx
- 文档编号:9820415
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:18
- 大小:441.60KB
Progress语言讲解.docx
《Progress语言讲解.docx》由会员分享,可在线阅读,更多相关《Progress语言讲解.docx(18页珍藏版)》请在冰点文库上搜索。
Progress语言讲解
目 录
1PROGRESS数据字典的使用
数据字典
建立表
建立字段
建立索引
DUMP/LOAD功能
2PROGRESS常用命令
2.1数据类型
▪char
▪decimal(deci)format“>>>9.99”
▪integer(int)format“>>>9”
▪logical(log)
▪dateformat“9999/99/99”
2.2定义命令
▪definevarpart1ascharformat“x(8)”init‘1’.-----------------变量定义
▪define(new)sharedvarpart1ascharformat“x(8)”init‘1’.------------变量定义
▪definevarpart1likept_part.----------------类似变量定义
▪definevarqtyasdecimalextent10.--------数组定义,初始化qty=0
▪Definebufferpart_mforpt_mstr.------------BUFFER定义
2.3输出显示命令
▪disppartlabel‘零件号’descrylabel‘描述’.
▪putpartat1.
▪Skip(n)
▪Message“加入新记录”
▪Message"系统控制文件必须维护"VIEW-ASALERT-BOXINFORMATION(warn/error)BUTTONSOKtitle"提示".
2.4数据记录操作命令
▪Create
▪Delete
▪set
▪Update
▪Prompt-for
▪Assign
▪Find
▪breakbypartbytypedesc
▪where
2.5其他命令
▪Undo,retry.
▪Validate(partbegins’1’,”零件号应以1开头”)
▪begins:
ifvar1begins‘a’then….以什么打头
▪leave
▪next
▪100modulo3=1:
取余数
▪+-*/=<><=>=<>:
加、减、乘、除、等于、不等于。
。
。
2.6判断、循环
if-then-else判断
ifvar1>var2then
var1=100.
else
var2=100.
Ifvar1>=var2then
do:
Ifvar1>20then
do:
F1=10.
F2=20.
End.
End.
Elsedo:
end.
DO循环
DoI=1to10:
A=b+c.
B=a/c.
End.
Repeat循环
Repeat:
A=a+10.
Ifa>=100thenl
eave.
End.
Foreach循环
Foreachpr01mwherepr01m_036>=‘a1’andpr01m_036<=‘a3’:
Ifpr01m_002begins‘1’then
next.
Findfirstdpt_mwherepr01m_016=dpt_nono-lockno-error.
Ifavaildpt_mthen
v_name=dpt_name.
Else
v_name=“”.
Disppr01m_002pr01m_003.
End.
3PROGESS常用函数
3.1转换函数
▪string(100.02):
将数字/日期转换成字符
▪date(month,day,year):
转换成日期
▪date('02/02/10'):
转换成日期
▪year取日期年
▪month取日期月
▪day取日期日
▪today今天日期
▪asc转换成asc函数
asc(“a”)
▪length长度函数
length(“sdfaa”)
3.2截取函数
▪substr(string,3,4)
▪trim(string):
去掉空格
▪index1=lookup(string1,string2)
3.3运算函数
▪truncate(100.26,1)=100.20:
某位以后的数字清零
▪integer(100.23)=100:
四舍五入取整
▪accum合计函数
FOREACHld_detBREAKBYld_part:
ACCUMld_qty_oh(TOTALBYld_part).
DISPld_partld_qty_ohACCUMTOTALBYld_partld_qty_oh.
END.
▪maximum最大值函数
DISPMINIIMUM("aaa","bbb","kkkk","dd").
▪minimum最小值函数
DISPMINIIMUM("aaa","bbb","kkkk","dd").
▪Round取整函数
Round(int,2)
▪Random随机函数
Randam(int1,int2)
3.4记录状态函数
▪first-of第一条记录
first-of(字段名)
▪last-of最后一条记录
last-of(字段名)
▪available可以得到记录
availablept_mstr
▪can-find可以找到记录
▪locked记录锁
3.5逻辑函数
▪and与
▪not非
▪or或者
3.6mfg/pro的函数
{mfdtitle.i}:
菜单变量定义
{mfselprt.i"printer"132}:
打印选择定义
{mfrhead.i}“报表头”
{mfrtrail.i}“报表尾”
{mfnp.imachine_mstrmachine_wkctrmachine_wkctrmachine_codemachine_codemachine_code}
4Progress基础
4.1变量定义
变量必须在第一次被使用之前定义,可以定义在程序的任何地方!
但是通常为了增加程序的可读性,变量定义都放在程序的开始处!
举例:
definevariablestr01ascharlabel"DemoString"initial"hello".
defvarstr02likestr01.
defvardt01asdateextent5.
defvarinte01asinteformat">>>9".
描述说明:
第一行:
str01是变量名,变量名不要与系统关键字重复,字符或者下划线开头;
label就是后续程序中对变量的描述;
initial给变量赋初始值。
第二行:
def和var都是简写,def是define的简写,var是variable的简写;PROGRESS支持语法简写
like和as的不同点是:
as后面直接说明变量类型,而like后面跟另外一个变量或者字段。
第三行:
extent5,表示该变量是数组变量。
第四行:
format">>>9" 指定变量格式指定变量格式一个最大的好处就是预留宽度,这个对变量的输入或报表的输出都很有用的。
PROGRESS程序每行结束必须有个“.”号
4.2注释
注释就是用/* ... */,可以嵌套,比如:
/*---注释1
/*注释2*/
---*/
4.3记录显示
举例:
如果进入PROGRESS编程模式以后连接了数据库,那么直接显示记录的值即可。
foreachTABLE_NAME:
displayTABLE_NAME.
end.
/*显示TABLE_NAME所有字段所有记录*/
或者:
findfirstTABLE_NAME.
displayTABLE_NAME.
/*显示TABLE_NAME第一条记录所有字段的值*/
通常显示记录值都是采用这2种方式!
当然,可以按要求显示特殊的字段,比如:
FOREACHpt_mstrWHEREpt_modelBEGINS"E"NO-LOCKBREAKBYpt_price:
DISPpt_modelpt_price.
END.
描述说明:
1、where后面带条件,比如=<><=>=等等,这种关系符,适用数字、日期字符串
2、no-lock,这是关键字,你只要记住:
如果接下来需要对记录进行修改,就不要用no-lock这个关键字。
如果只是查看数据,请加上no-lock
3、breakby,就是按某个字段排列,默认是按这个字段的升序,如果降序则后面加上desc,比如:
breakbypt_pricedesc。
如果需要多次排列,那么多by几次就可以,比如:
breakbypt_pricebypt_date
举例:
另外一个常用的显示或者更新记录的语句是find
findpt_mstrwherept_model="mainboard"no-lockno-error.
findfirstpt_mstrwherept_price<=10no-error.
findlastpt_mstrwherept_price<=10no-error.
描述说明:
1、where后面的条件跟foreach语句类似;
2、no-lock的作用跟foreach的no-lock也是一样的;
3、no-error,通常是find就加上,否则如果找不到满足条件的记录,系统会出错误提示;而实际上,通常需要在程序自己判断结果;
4、findfirst就是定位第一条满足条件的记录;findlast定位最后一条满足条件的记录;
4、还有一种叫findnext,就是定位当前记录的下一条;
5、find和findfirst/findlast不同的是,find后面带的条件,通常是满足TABLE的某个唯一索引。
4.4判断
举例:
判断最简单了,就是一个if条件then...else...,比如:
DEFINEVARstr1ASCHARINITIAL"CPU".
IFstr1="CPU"THENDISP"cpu".
ELSEDISP"NOTcpu".
当然,这个”条件“可能有很复杂的组合。
如果,涉及到的动作比较多,那么做法是用
do:
...end.,
DEFINEVARstr1ASCHARINITIAL"CPU".
IFstr1="CPU"
THENDO:
str1="MyCPU".
DISP"cpu".
END.
ELSEDO:
str1="Mymemory".
DISP"NOTcpu".
END.
DISPstr1.
if支持嵌套,怎么嵌套?
你自己会了!
不是吗?
4.5循环
PROGRESS的循环功能实在令人不敢恭维,没有when没有while,没有loop、for。
只有do和repeat,但是do通常不会用来做循环,所以主要介绍repeat:
举例:
通常实现循环的模式:
repeat:
/*处理事务*/
if条件thenleave./*退出循环*/
end.
现在,你试试用find和repeat实现foreach的功能!
REPEAT:
FINDNEXTpt_mstr.
DISPpt_mstrWITH2COLUMNS.
END.
或
DEFVARiASINTEGER.
FOREACHpt_mstrWHEREpt_price>10NO-LOCK.
i=i+1.
DISPpt_partpt_priceWITHDOWNFRAMEa.
IFi>200THEN
LEAVE.
END.
4.6赋值运算
举例:
+-*/,就是加减乘除了!
ttl_amoount=ttl_ammount+dtl_amount.
x_a=x_b/x_c.
str_ttl="I'm"+"sure!
".
dt01=today-1.
dt01=3/22/2005./*日期*/
当然,日期和字符串不能做乘法或者除法!
5Progress进阶
5.1First-of()和last-of()用法
【结构】
【数据】
举例:
foreachdemobreakbydemo.vend:
iffirst-of(demo.vend)thendispdemo.vend.
end.
很明显可以看出来的就是,每个first-of或者last-of对应的字段,必须有foreach...breakby来对应它,否则语法错误(即使first-of的字段是索引也会出错)
比如以下语句会出错:
foreachdemono-lock:
iffirst-of(demo.vend)thendispdemo.vend.
end.
描述说明:
first-of()函数的功能,就是通过breakby对该字段进行排序,然后对该字段相同的记录进行“预览”,当第一次出现时发生!
比如,示例中,breakby首先对demo.vend进行排序,这样会出现很多vend是“hp”和“ibm”的记录,当第一次出现“hp”记录和第一次出现“ibm”记录时,各显示一下该vend名称。
last-of()一样,不同的是“最后一次出现时发生”!
5.2函数功能
first-of()函数的功能,就是通过breakby对该字段进行排序,然后对该字段相同的记录进行“预览”,当第一次出现时发生!
比如,示例中,breakby首先对demo.vend进行排序,这样会出现很多vend是“hp”和“ibm”的记录,当第一次出现“hp”记录和第一次出现“ibm”记录时,各显示一下该vend名称。
last-of()一样,不同的是“最后一次出现时发生”!
举例:
foreachdemobreakbydemo.mdlno:
iflast-of(demo.mdlno)thendispdemo.
end.
这段程序的结果如下:
通过收货日期和数量等,可以看到,每条记录,都是相同“mdlno”的最后一条
5.3应用
练习:
对每个mdlno收货进行合计,然后在mdlno的下一行显示合计数,类似这样的结果:
参考答案:
DEFVARttlASDECI.
OUTPUTTOc:
\demoout.txt.
FOREACHdemoBREAKBYdemo.mdlno:
ttl=ttl+demo.qty.
PUTdemo.mdlnodemo.rcvdtdemo.qtySKIP.
IFLAST-OF(demo.mdlno)THENdo:
PUT" 合计"ttlSKIP.
ttl=0.
END.
END.
OUTPUTCLOSE.
描述说明:
first-of 和 last-of可以对应多个breakby的字段,比如可以先按mdlno汇总,再按vendor汇总!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Progress 语言 讲解
![提示](https://static.bingdoc.com/images/bang_tan.gif)