Mainframe上随时查看任意库代码Rexx实现
Mainframe上面工作经常需要临时查看Production代码库当中的代码,又不希望输入长长的库名称。可以用REXX写一个Retrieve功能的脚本,放在
USERID.REXX.EXEC
这个pds下面。运行的时候TSO RET your_program_name
即可随时查看。这里是这个RET程序的实现方法,原本是公司内部用的,由前辈们积累下来的财产,我见它有通用性和扩展性,故稍作修改简化后贴这里:
EDIT IBMUSER.REXX.EXEC(RET) - 01.02 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 /* rexx */
000002 /*********** ret - retrieve specific member from multiple libs*********/
000003 arg ...
JCL提交REXX脚本
来说说如何用JCL提交REXX脚本。
1、写一个最简单的显示有一行提示的REXX脚本叫SAYHELLO
:
1 EDIT IBMUSER.REXX.EXEC(SAYHELLO) - 01.00 Member SAYHELLO saved
2 Command ===> Scroll ===> CSR
3 ****** ***************************** Top of Data ******************************
4 000001 /******************************REXX*********************************/
5 000002 SAY "I WILL PRINT 'HELLO' IN SYSTSPRT BY SUBMITTING JCL"
2、写一个JCL如下IBMUSER.TEST.JCL(SAYHELLO)
:
EDIT IBMUSER.TEST.JCL(SAYHELLO) - 01 ...
REXX怎么保存"Find ALL"的结果
最近的项目经常跟MQ打交道,将输入数据填在一个dataset里面提交给MQ解析,字段之间用逗号隔开。所以在测试MQ接口的时候会经常一边对着FSD文档,一边数dataset里面的逗号个数的情况。数多了就烦了。其实到今天才想起来可以用一个"FIND ALL"
的ISPF命令。
FIND ',' ALL
这样,逗号的个数就不用数了,直接显示在屏幕右上角。
既然这样,利用REXX应该可以保存这个“FIND ',' ALL'
的结果。 研究了一下,可以这样:
编辑IBMUSER.REXX.EXEC(CHECK)
这个member,输入如下的macro:
1 ADDRESS ISPEXEC
2 "ISREDIT SEEK ALL ','"
3 "ISREDIT (COUNT) = SEEK_COUNTS"
4 SAY "Comma number: "!! COUNT !! "'!'"
5 EXIT 0
打开MQ的DATASET,比如 ...
more ...Rexx顺序处理文件所有行
这是典型的自上而下扫描一个dataset中每一行,而做相应处理的Rexx脚本,几乎所有的处理文件I/O的Rexx脚本都会涉及到:
ADDRESS TSO
indataset = 'IBMUSER.REXX.EXEC(INFILE)' /*read in input file */
"alloc f(fin) ds('"indataset"') shr reuse"
"execio * diskr fin (finis stem in."
"free f(fin)"
do i=1 to in.0 /*loop in file until the last line reached */
one_line = strip(in.i)
call ...
ISPF下如何去掉程序的第72至80列
个人不是很喜欢ISPF 3.13
提供的两个Dataset比较的功能,总觉得看得不是很直观。平时还是比较习惯用windows下面的winmerge这个软件来比较。但是有个问题,就是比较的两个程序经常在第72列至80列的行号不一致,导致没法比较。所以这里就来总结一下如何去掉DATASET的中烦人的第72列至80列内容。
方法一:直接在ISPF下面用命令去掉
这是最直接最快的办法。去掉第72列至80列的命令有下面两个:
NUM ON; UNNUMB
C P'^' ’ ’ 73 80 ALL /* Changes all non-space characters to spaces in col 73 to 80*/
方法二:用第三方脚本实现
上面的方法如果是只有少数几个程序,那么手动命令去掉第72列至80列没什么。但是如果你一下子需要对几百个dataset或者同一个PDS下面的所有member去掉第72列至80列,则最好最快的办法是将所有代码通过FTP下载到本地,然后用第三方脚本语言(如VB,Phthon,Ruby,JS等)来解决。
这里是一段自己的Ruby脚本,作用是将C:\prod ...
REXX学习笔记
最近在学习Rexx脚本,打算做一些自动化。归纳了些点总结下放在这里以备查询。
一些基本概念
- REXX:
REstructured eXtended eXecutor (REXX) language
扩充结构化执行语言 - REXX中变量无需事前定义
- Debug REXX:用REXX TRACE或者用interactive debug facility来定位error
- SAA Procedures Language:REXX的子集,在TSO/E,CICS,IMS等多种环境中应用
- 要运行REXX exec,必须至少有一种可用的
Host command environments
。默认的是TSO
。还有MVS
,LINK
,LINKMVS
,LINKPGM
,ATTACH
,ATTCHMVS
,ATTCHPGM
,ISPEXEC
,ISREDIT
,CONSOLE
,CPICOMM
,LU62
,APPCMVS
等等,常用的有 ...