How can I run my Rexx program as a batch job?

后端 未结 3 1314
别那么骄傲
别那么骄傲 2021-01-22 15:34

I have a Rexx program that I want to run as a batch job. How can I do this?

This is my program :-

/* Rexx – HELLO – Write Hello World */
Say \"hello Worl         


        
3条回答
  •  广开言路
    2021-01-22 15:49

    Yet more additional comments to the answer by MikeT...

    Suppose you want your JCL to be self-contained: you want to include a REXX exec as an in-stream data set in the JCL, rather than referring to a REXX exec stored in a PDS member.

    Here's the "trick" (for IRXJCL; I haven't tested this trick with other programs): specify a single null (X'00') byte as the value of the PARM attribute of the EXEC statement.

    To specify the null byte, use the z/OS ISPF editor with HEX ON:

    //REXX     EXEC PGM=IRXJCL,PARM=' '
    66DCEE44444CECC4DCD7CDEDCD6DCDD7707
    1195770000057530774E997133B7194ED0D
    

    For example, if you entered PARM=' ' with a space as the value, overtype the 4 of the hex value of that space with a 0.

    Here's an example job step containing an in-stream REXX exec that processes the output from a previous step in the same job:

    //* PARM value is a single X'00' byte                          
    //REXX     EXEC PGM=IRXJCL,PARM=' '                            
    //SYSEXEC  DD   DATA,DLM=$$                                    
    /*                                                             
       Transposes first line of input CSV into one record per field
       Reads CSV from ddname SYSTSIN.                              
    
       Writes output to ddname SYSTSPRT.                           
    */                                                             
    columnSeparator = ","                                          
    
    /* Get the header row */                                       
    parse pull row                                                 
    /* Get column names */                                         
    do i = 1 until row = ""                                        
      parse value row with columnName "," row                      
      say columnName                                               
    end                                                            
    exit 0                           
    $$                               
    //SYSTSIN  DD  DSN=&&CSV,DISP=OLD
    //SYSTSPRT DD  SYSOUT=*          
    

    Notes:

    • In this context, the first line of the REXX exec does not need to contain the string "REXX"
    • DLM=$$ enables you to use REXX comment syntax (/*) without prematurely ending the in-stream data set
    • &&CSV refers to a CSV file created by a previous job step (not shown)

    I use this "in-stream REXX" technique mostly for ad hoc execs to transform the output of a batch program into what I really want. This technique can be useful for demonstrations and quickly bouncing ideas around; other developers can view the REXX code in situ in the JCL in SDSF output, tweak it, and then submit the tweaked version.

提交回复
热议问题