Mainframer版本的程序猿吐槽
下面这段JCL挺有意思的,之前见过其它版本的,今天在一个国外网站看到的mainframe
版本的,记下,纯属娱乐。
//MYWALLET EXEC PGM=SPOUSE
//SYSIN DD DSN=MYWALLET.ALL,DISP=SHR
//SYSOUT DD DUMMY
Rexx调用Skeleton JCL提交job的例子
这个例子一共包含3个部分
Rexx主程序:IBMUSER.REXX.EXEC(MYSKELE)
带参数的sekleton JCL:IBMUSER.REXX.SKELL(JCLSKEL)
最终生成的Dynamic JCL:IBMUSER.DYNAM.JCL(SUBJCL)
File Edit Edit_Settings Menu Utilities Compilers Test Help
VIEW IBMUSER.REXX.SKELL(JCLSKEL) - 01.06 Columns 00001 00072
Command ===> Scroll ===> CSR
****** ***************************** Top of Data ******************************
000001 //&JOBNAME JOB '000000000000000000CMP',
000002 // CLASS=3,NOTIFY ...
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 ...
Local FTP Trigger JES job
随便写了一个搜索ABC字符串的JCL,保存到桌面:
C:\Documents and Settings\Foo\Desktop\IBMUSERJ.txt
//IBMUSERJ JOB '000000000000000000CMP',
// CLASS=0,NOTIFY=IBMUSER,TIME=NOLIMIT,MSGCLASS=R
//ONLINE EXEC PGM=ISRSUPC,
// PARM=(SRCHCMP,
// 'ANYC')
//NEWDD DD DSN=IBMUSER.PROCLIB,DISP=SHR
//OUTDD DD SYSOUT=*
//SYSIN DD *
SRCHFOR 'ABC'
//*
用ftp的方式将jcl送入JES系统执行。win+R
打开cmd
C:\Documents and Settings ...
FTP from windows to Mainframe
win+R
打开cmd:
C:\Documents and Settings\Foo\Desktop>ftp ftpserver
/*Here please input username/password*/
ftp> ascii
200 Representation type is Ascii NonPrint
ftp> quote site lrecl=80 blksize=16000 recfm=fb
200 SITE command was accepted
ftp> put test.txt 'ibmuser.test.psfile(+1)'
200 Port request OK ...
ISPF-提高效率少用PF3和START
同一个PDS下,记得多用BROWSE
, VIEW
,EDIT
,COMP
这些命令。比如BROWSE TEST02
或者EDIT TEST03
或者VIEW TEST04
或者COMP 'IBMUSER.PROJ.TEST.JCL1((TEST01)'
这样,不需要另外PF3或者START开一个窗口。
比如需要在同一个PDS下的TEST02这个JCL中拷贝一些东西到当前的TEST01的时候,经常用到。
File Edit Edit_Settings Menu Utilities Compilers Test Help
```````````````````````````````````````````````````````````````````````````````
VIEW IBMUSER.PROJ.TEST.JCL ...
ICETOOL: 大小写转换
TRAN=UTOL
: uppercase to lowercase
TRAN=LTOU
: lowercase to uppercase
例子:
//CTL1CNTL DD *
INREC IFTHEN=(WHEN=INIT,OVERLAY=(1:1,3,TRAN=LTOU)), :对input的进来处理的每一条数据的前3位先转为大写再说
IFTHEN=(WHEN=(...),BUILD=(...)),
IFTHEN=(WHEN=(...),BUILD=(...))
ICETOOL:数据类型转换
//STEP001 EXEC PGM=ICETOOL,REGION=4096K,COND=(0,NE)
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN DD DSN=MYINPUT,DISP=SHR
//OUT DD DSN=OUTFILE,DISP=SHR
//TOOLIN DD *
COPY FROM(IN) TO(OUT) USING(CTL1)
/*
//CTL1CNTL DD *
OUTFIL FNAMES=OUT, :MYINPUT的第 ...
ICEMAN:字符替换
用于替换dataset中出现的字符串:
//STEP001 EXEC PGM=ICEMAN,REGION=4000K
//SORTIN DD DSN=MYINPUT,DISP=SHR
//SORTOUT DD DSN=MYOUTPUT,DISP=SHR
//SYSIN DD *
OPTION COPY
INREC FINDREP=(INOUT=(C'0000',C'AAAA',C'1111',C'BBBB'))
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*
将出现的'0000'
替换成'AAAA'
,'1111'
替换成‘BBBB‘
当然,可以限定在特定几列替换 ...
ICETOOL: 多文件输出
取一个文件MYINPUT
中的有用字段,组装成多个不同LRECL
的输出文件。这个也是项目中用到的,我再这里简化了好多!
//STEP001 EXEC PGM=ICETOOL,REGION=4096K,COND=(0,NE)
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(30,3),RLSE)
//IN DD DSN=MYINPUT,DISP=SHR :LRECL=05
//OUT1 DD DSN ...