Mainframer版本的程序猿吐槽

下面这段JCL挺有意思的,之前见过其它版本的,今天在一个国外网站看到的mainframe版本的,记下,纯属娱乐。

//MYWALLET EXEC PGM=SPOUSE
//SYSIN DD DSN=MYWALLET.ALL,DISP=SHR
//SYSOUT DD DUMMY 
more ...

Rexx调用Skeleton JCL提交job的例子

这个例子一共包含3个部分

Rexx主程序IBMUSER.REXX.EXEC(MYSKELE)
带参数的sekleton JCLIBMUSER.REXX.SKELL(JCLSKEL)
最终生成的Dynamic JCLIBMUSER.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 ...
more ...

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 ...
more ...

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 ...
more ...

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 ...
more ...

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 ...
more ...

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=(...))
more ...

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的第 ...
more ...

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‘ 当然,可以限定在特定几列替换 ...

more ...

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 ...
more ...