版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章系统编程工具REXX和CLIST第一部分(REXX):
1.REXX简介
2.Rexx入门学习
3.REXX编程基础
4.程序调试和错误处理第二部分(CLIST):
1.CLIST简介第一部分(REXX)1.REXX简介
2.Rexx入门学习
3.REXX编程基础
4.程序调试和错误处理
1.REXX简介REXX的起源和历史:由MikeCowlishaw设计
-1979-1982,IBMHursleyLabs,UK-Usingfeedbackfromover300usersonVNETDesignedtomaketheackofprogrammingeasierIntendeduses:-personalprogramming-Tailoringusercommands-Macros-Prototyping-ApplicationsNowrunsonmanyvendorsplatformsREXX简介运行平台:IBM的所有平台:
-VM–REXX首次出现(1983)
-OS/2-AIX-VSE-OS/390TSO(1988)1987年被选为SAAProceduralLanguage也可以用在许多非IBM平台上:
-Tandem,VAX,Amiga-SeveralUNIXversions(includingLinux)-windows(ObjectREXXfromIBM)-NetRexxREXX简介REXX特点:易学易用性自由的语法格式Eitherinterpretedorcompiled丰富的built-in函数TypelessvariablesVerystrongparsing好的调试工具提供和其他语言的接口可扩展性REXX简介REXX在z/OS上的使用CommandproceduresPersonalprogrammingApplicationinitiationApplicationprototypingApplicationprogrammingCommonmacrolanguageforvariedapplications-ISPFEditmacros,ISPFDialogs,Netview-CICS,DB2,QMF-OthervendorproductsREXX简介InterpretedversusCompiled解译器:
-当程序在运行时,翻译并执行每个程序语句编译器:
-首先将整个程序翻译成机器语言
-然后通过链接-编辑成加载模块
-然后用户可以运行该程序REXX简介一个简单的REXX程序
/*REXXexectointroduceREXX*/Say“Hello!MynameisREXX.What’syours?”ParsePullnameIfname=‘’ThenSay“You’renotfriendly”ElseSayname“isanicename.”Exit02.Rexx入门学习REXXunderTSOREXXexec可以是一个顺序数据集或一个PDS成员TSOEXEC命令调用一个REXX或CLIST程序三种使用EXEC命令的方法:
-Explicitexecution:EXECdatasetparameters-Implicitexecution:membernameparameters-Extendedimplicitexecution:%membernameparameters查找包括:
//SYSEXECDDconcatenationthen//SYSPROCDDconcatenation
用来作为命令行上的成员名.READY%myrexx2472my.dataREXXexecs在TSO下的执行:在TSO/E中用EXEC命令运行非编译的程序。精确运行一个REXX可执行程序格式如下:
EXECDSName(数据集名字)Parameterexec例如:名为USERID.REXX.EXEC(TIMEGAME)的数据集被执行,格式如下:完整数据集被调用,数据集名要被引号标记,如下:
EXEC‘userid.rexx.exex(timegame)’exec非完整数据集被调用,如下:
EXECrexx.exex(timegame)exec/*eliminatesprefix*/
EXECrexx(timegame)exec/*eliminatesprefixandexec*/通常REXX命令的输入执行可以在ISPF.6对应面板中的COMMAND后面输入,也可以在READY提示符下面输入。Rexx中的注释:注释以/*开始,以*/结尾.注释可以嵌套.例:1./*REXXexecsshouldbeginwithacomment*/2.Say“Hello!”/*commentmayfollowinstruction*/3./*commentmayprecedeinstruction*/Say“Hello!”4./*Acommentmaybelong,upto250characters,anditmayspanmultiplelines*/5./*Commentsmay/*Commentsmaybenested*/benested*/继续和缩排短指令可以用“;”分开:
a=‘Cat’;b=‘Dog’;c=17长指令可以用“,”分行:
sentence=“Thequickbrownfox”,“jumpsoverthelazydog.”REXX不支持缩排:
Ifa=bThenSay“aandbareequal.”ElseSay“aandbarenotequal.”变量REXX中,变量的命名规则:
-最多包含250个字符
-可以包含字母,数字和一些特殊字符(TSO中:@#$!?_.¢).-不能以数字或.开头变量不用必须声明.REXX中的变量是无类型划分的,所有的数据都是字符型数据.算术运算:运算符:**指数运算*乘法
/除法
%整除
//取余
+加法
-减法算术优先规则:REXX的通常优先级规则:()圆括号+,-前缀符号**指数运算符号*,/,%,//乘法和除法+,-加法和减法算术优先规则:例:Say7*3+4Say2**3**2Say7+3*4Say2**(3**2)Say7–3+4Say-5+6Say7+3–4Say-5+6*2Say3**2Say–(5+6)*2Say指令:语法:Sayexpression每个Say指令显示一行输出.例:Say“Hello,world.”Say25*(9/3)Say“Theansweris:”num1+num2SaySay‘’Parse指令
语法:ParsesourcevariabletemplateWheresourceistheinputsourceofthedatatobeparsed,andvariabletemplatearetherulesforparsingthatdata,andthevariablestowhichthedatapartswillbeassigned.从键盘读(ParsePull)语法:ParseUpperPullvariabletemplate-or–Pullvariabletemplatevariabletemplate是变量名的列表.
在给模板中的变量赋值前,将输入数据自动转换成大写形式.例:/*REXXsample*/Say“Pleaseenteryourname:”ParseUpperPullnameSay“Hello”name”.”Say“Enter2numbers:”ParseUpperPullnumanumbSay“Youenteredthesenumbers:”numa“and”numb如果保留输入数据的大小写形式,则删除关键字Upper:ParsePullvariabletemplate从命令行接收参数(ParseArg)语法:ParseUpperArgvariabletemplate-or–Argvariabletemplate例:/*REXXsample*/ParseUpperArginparmsSayinparmsParseUpperArgparm1parm2parm3restSayparm1Sayparm2
如果保留输入数据的大小写形式,则删除关键字Upper:ParseArgvariabletemplateTrace指令:语法:Traceoption有用的选项:-NNormal(default)-OOff-RResults-IIntermediates注:Trace指令通常被用语Rexxexec程序的调试.跟踪一个exec也就意味着你希望在exec中的指令被执行前Rexx可以在屏幕上显示出这些指令.3.REXX编程基础比较关系REXX中的比较关系有时被称为二进制条件表达试,因为它们总是只有两种可能结果:True(值为1)和False(值为0).REXX中有两种类型的比较关系:-字符串比较
-数值比较字符串比较两种字符串比较类型:-普通:忽略字符串前后的空格
-严格:每个字符必须精确匹配例:answer=“YES“/*assignvariable*/Sayanswer=“YES”/*normalcomparison*/Sayanswer=“yes”/*comparisonsare*//*casesensitive*/Sayanswer==“YES”/*strictcomparison*/Say5==5.0/*strictcomparison*/数值比较比较符:=equal\=notequal﹁=notequal<>notequal(lessthanorgreaterthan)><notequal(greaterthanorlessthan)<=lessthanorequalto\>lessthanorequalto(notgreaterthan)﹁>lessthanorequalto(notgreaterthan)>=greaterthanorequalto\<greaterthanorequalto(notlessthan)﹁<greaterthanorequalto(notlessthan)<lessthan>greaterthan数值比较例:num1=31;num2=30Saynum1=num2Saynum1\=num2Saynum1>num2Saynum1<num2If-Then-Else用法:语法:IfcomparisonTheninstruction1Elseinstruction2例:Ifvar1=var2ThenSay“Thevaluesareequal.”ElseSay“Thevaluesarenotequal.”Do-End组在Then或Else后面,多于一条指令时,将这些指令包含在Do和End之间.Ifvar1=var2ThenDoinstruction1instruction2etc…End逻辑操作符比较结果(false是0,True是1)可能和这些操作符结合.操作符是:&与
|或
&&异或
\非逻辑操作符例:var1=1;var2=0Sayvar1&var2/*bothtrue?*/Sayvar1|var2/*eitheronetrue?*/Sayvar1&&var2/*onlyonetrue?*/逻辑表达试例:var1=41;var2=1;var3=0Sayvar1>var2&var3>var2Sayvar1>var2|var3>var2Sayvar1>var2&&var3<var2Sayvar1>(var2|var3)>var2
If-Then-Else嵌套If-Then-Else结构可以被嵌套.例:Iftoken1=“CONCAT”ThenDo..instructions..EndElseIFtoken1=“BLK”|token1=“BLOCK”ThenDo..instructions..EndElseIftoken1=“DATASET”ThenDo..instructions..End选择结构TEST1TEST2TEST3instruction(s)instruction1instruction2instruction3TRUETRUETRUESelect-When-Then-Otherwise用法Select结构可以代替多I-T-Es.例:SelectWhentoken1=“CONCAT”ThenDo..instructions..EndWhentoken1=“BLK”|token1=“BLOCK”ThenDo..instructions..EndWhentoken1=“DATASET”ThenDo..instructions..EndOtherwiseSay“Error–unrecognizedtoken:”token1End/*ofSelect*/DoWhile循环语法:DoWhilelogicalexpression..loopinstructions..End例:var1=12DoWhilevar1>6Sayvar1var1=var1–1End/*DoWhile*/TESTProcessFALSETRUEDoUntil循环语法:DoUntillogicalexpression..loopinstructions..End例:var1=1DoUntilvar1>6Sayvar1var1=var1+1End/*DoUntil*/TESTProcessFALSETRUE控制重复次数的循环语法:Docntlvar=initTofinalByincrFormaxloopscntlvar-循环控制变量名
init-控制变量的初始值
final-控制变量的最大值
incr–循环变量循环一次增加的值
maxloops–最大循环次数控制重复次数的循环例如:Doi=1To100/*theseinstructionswillexecutewhilethevalueofthevariableichangesfrom1to2to3…to100.Thedefaultincrementvalueis1*/EndDoi=1To100By10/*execute10times*/Doi=100To1/*wrong,notbeexecuted*/Doi=100To1By-1/*execute100times*/
控制重复次数的循环下列循环将被执行多少次?1.Doi=1…End/*forever*/2.Do5…End/*Do5*/3.DoForever…End/*Forever*/避免可怕的GoTo因为GoTo语句经常在程序中产生一些很严重的bug,所以REXX提供了一些其他的指令代替它执行相应功能,如下:-Leave-Iterate-Return-Exit-SignalReturnandExitwillbothcauseimmediatecessationofthecurrentlyexecutingroutine.Controlisreturnedtothecallingenvironment.LeaveandIterateLeave指令使得REXX终止当前循环:DoForever……Leave…EndIterate指令使得REXX经由其余循环指令并将控制传递到End指令:DoForever……Iterate…End如何确定属于哪个循环?循环是可以进行嵌套的.循环控制变量可以作为循环的名字用在End,Leave和Iterate指令上.例:Doouter=1…Doinner=1…If…ThenIterateinnerIf…ThenIterateouterIf…ThenLeaveinnerEndinner…Endouter函数和子程序本节目标:1.明确什么是函数和子程序
2.明确函数和子程序间的不同点
3.Built-in函数的使用
4.如何写内部函数和子程序
5.如何写外部函数和子程序什么是函数?向主调度程序返回一个值的一个程序或routine。返回值是一个单独串。返回值代替函数调用,因此函数根本不回独立使用。语法:
functionname(argument1,argument2,…)例:
parm=“Thisistheparameter.”n=Words(parm)4<wordsfunction>函数类型InternalBuilt-inExternal-TSO/Eexternal-YourownREXXcode-ProgramsinotherlanguagesSearchorder:-Internal-REXXBuilt-in-TSO/EExternal-FunctionPackage-Programsinotherlanguages-ExternalExecsandCLISTSBuilt-in函数最简单和最有用的函数类型:-Stringmanipulation-Comparison-Formatting-Conversion-Binary-Arithmetic-Information-Programdiagnostic字符串操作函数Thesefunctionsextractportionsofstrings:-Substr(),Strip(),Left(),Right(),Delstr()Thesefunctionsaddtostrings:-Insert(),Center(),Justify(),Overlay()Thesefunctions“find”withstrings:-Pos(),Lastpos(),Verify(),Abbrev()Thesefunctionsmanipulatein“words”:-Word(),Wordindex(),Wordlength(),Wordpos()-Words(),Delword(),Subword()Togetthelengthofastring–Length()Totranslateastring–Translate()Toreversethecharactersinastring–Reverse()Substr()Substr()函数将一个输入串分成几个部分并返回其中的一部分.语法:Substr(input,n),length,padSubstr()例:x=Substr(‘abcdefg’,3)==>returns‘cdefg’
x=Substr(‘abcdefg’,3,4)==>returns‘cdef’x=Substr(‘abcdefg’,3,7,‘!’)==>returns‘cedfg!!’Formatting函数Center()/Centre()Copies()Format()Justify()Left()Right()Space()Strip()Formatting函数函数解释:NotethatboththeUSEnglishandtheUKEnglishspellingsofCenterareaccepted.Tomakemultiplecopiesofastring,useCopies().Toformatandroundanumber,useFormat().Toaddordeletespacesandothercharactersbetweenwords,useSpace().Toremoveleadingand/ortrailingcharactersfromastring,useStrip().例:x=Left(‘abcdefg’,4)returns’abcd’x=Right(‘abcdefg’,4)returns‘defg’x=Left(‘abcdefg’,10)returns‘abcdefg’x=Right(‘abcdefg’,10)returns‘abcdefg’Conversion函数字符,十六进制和十进制数之间的转换
-用于任何比较
C2X(),C2D(),D2C(),D2X(),X2C(),X2D()-二进制和十六进制之间的转换
B2X(),X2B()其他函数二进制逻辑函数
-Bitand()-Bitor()-Bitxor()数值函数
-Abs(),Min(),Max(),Sign(),Trunc(),Format()-Random()-Digits(),Form(),Fuzz()信息函数常规信息函数:-Date(),Time(),Userid()系统程序信息函数:-SYSVAR(),MVSVAR(),SYSCPUS()程序诊断函数:-Sourceline(),Errortext(),Condition()终端宽度:-Linesize()子程序子程序与函数的区别:1.Functionmustreturnavaluesubroutinemayormaynot2.Valuereturnedfromfunctionreplacesfunctioncall,valuereturnedfromsubroutinepassedtoREXXspecialvariable‘result’3.Functioninvokedwithfunctioncall–funcname(args)4.SubroutineinvokedwiththeCallinstructionCall指令语法:CALLsubrtnarguments所有的函数都可以被作为子程序调用.为什么要用函数和子程序?结构化程序所必须的将程序分为多个模块代码的重复利用函数和子程序可以是内部或外部的4.程序调试和错误处理程序目标:-可靠性
-能处理不可预测事件
-给用户发送有意义的错误信息
-错误返回非零值
-易维护性易维护性包括好的注释大多数可执行程序还包括:-包含修改历史的文档
-主程序
-子程序
-错误恢复程序使用有意义的变量名采用一致的设计方法形成一种编码风格Signal指令CauseunusualtransferofcontrolUsedtotraperrorconditionsDestroyscontrolstructures-Do–End,If,SelectFivesignaltraps:-Error-uninitializedvariablehasbeenused-Failure–non-zeroreturncodefromhostcommand-Halt–negativereturncodefromhostcommand-Novalue–externalattempttointerruptexec:PA1,thenHI-Syntax–syntaxerrorsandrun-timeerrorsSignal指令Toturnthetrapon,theinstructionis:SignalOntrapnameToturnthetrapoff,theinstructionis:SignalOfftrapnameForexample:AlmosteveryexecshouldincludeSignalonNovalueAtornearthebeginningoftheprogram.返回值的规定0=complete,unambiguoussuccess4=verylikelysuccessful,butwarning8=probablefailure,butthesystemisstillworking12=certainfailure16=worsethan1220=fundamentalsystemenvironmenterrorThehigherthenumber,theworsetheerror.Diagnostic函数Sourceline()-Returnsnumberoflinesofcode,oractuallineofsourcecodeCondition()-Returnsinformationdependingononeoffourarguments(C(condition),D(descriptive),I(instruction)andS(status))Errortext()-ReturntextofREXXerrormessageassociatedwithargumentnumberREXXspecialvariablesigl-Assignedwithlinenumberwhereconditiontraperroroccurred测试测试的数量取决于可能的最终用户规模开始用少量数据测试测试代码的所有部分从错误中测试可恢复性UseREXXaidstoconfirmtheprogramflow-TraceinstructionTrace指令REXXTrace指令-有用的选项:TraceR–“Results”–mostusefulTraceN–“Normal”–tracesnegativereturncodesTraceO–“Off”–turnstracingoffTraceI–Intermediates–mostinformation其它Trace选项:-A,C,E,F,L,S,?,!,+n,-nTrace-不修改代码
-TSO命令EXECUTILTS–运行可执行程序之前REXXTrace()函数:-trace_actions_in_effect=Trace()
交互式调试Trace?在每个指令处停止:-Pressentertocontinue-type“=”tore-executelastclause-typeanythingelse–likeREXXTRY–processlineimmediatelyTracen–skipnpause(nisawholenumber)其他调试工具Attentionmode(PA1)immediatecommands-HE–haltexecution-HI–haltinte
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度分享大全人事管理篇十篇
- 单位管理制度呈现大合集人事管理十篇
- 《行政职业能力测验》山西省吕梁地区岚县2024年公务员考试全真模拟试卷含解析
- 《喜迎中秋模板》课件
- 新餐饮浪潮的魅力
- 重症监护室护士工作总结
- 妇科护士的工作心得
- 2023年-2024年项目部安全管理人员安全培训考试题及答案基础题
- 2023-2024年项目管理人员安全培训考试题答案典型题汇编
- 2023年-2024年新员工入职安全教育培训试题含答案【突破训练】
- 食品安全应急管理和突发事故报告制度
- 艺术学概论第一章-彭吉象
- 51job在线测评题集
- 2024新教科版一年级科学上册全册教案
- 2024儿童身高现状报告
- 趣味知识问答100道
- 紫砂壶介绍课件
- 2023年度学校食堂食品从业人员考核试题(附答案)
- 伊朗政府与政治课件
- 上交所金桥数据中心用户手册
- 互联网金融(同济大学)智慧树知到期末考试答案章节答案2024年同济大学
评论
0/150
提交评论