0

次のように、いくつかの REXX コードを使用して作成された JCL にソート パラメーターがあります。

/* REXX */                                                           
'EXECIO * DISKR ZEROGDT (STEM ZGD.'                                  
S21='                     '                                          
OUTVAR1=' SORT FIELDS=COPY'                                          
'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                                
DO I=1 TO ZGD.0                                                      
   ACCTNBR=SUBSTR(ZGD.I,33,16)                                       
   IF I=1 THEN DO                                                    
     OUTVAR1=" OMIT FORMAT=CH,COND=(33,16,EQ,C'"||ACCTNBR||"',OR,"   
   END                                                               
   ELSE DO                                                           
      IF I=ZGD.0 THEN OUTVAR1=S21||" 33,16,EQ,C'"||ACCTNBR||"')"     
      ELSE OUTVAR1=S21||" 33,16,EQ,C'"||ACCTNBR||"',OR,"              
   END                                                               
   'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                             
END                                                                  
'EXECIO 0 DISKW ACCOUNT (FINIS'                                      

上記の REXX コードは、次のようにソート パラメーターを作成することを知っています。

SORT FIELDS=COPY                                     
OMIT FORMAT=CH,COND=(33,16,EQ,C'8257310018808572',OR,
                     33,16,EQ,C'8257310018076428',OR,
                     33,16,EQ,C'8257310017959681',OR,
                     33,16,EQ,C'8257310016504835',OR,
                     33,16,EQ,C'8257310016059467',OR)

ただし、入力ファイル内の単一のレコードを処理することはできません。単一のレコードを処理するように REXX コードを変更しようとしていますが、できませんでした。どんな助けでも大歓迎です。

4

1 に答える 1

0

以下のコードでは、最初の行を最後にすることもできます。元のコードでは、IF ステートメントがネストされているため、これを説明できませんでした。

/* REXX */                                                           
'EXECIO * DISKR ZEROGDT (STEM ZGD.'                                  
OUTVAR=' SORT FIELDS=COPY'                                          
'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                                
DO I=1 TO ZGD.0                                                      

   IF I = 1 THEN  
      OUTVAR = " OMIT FORMAT=CH,COND=(33,16,EQ,C'" || SUBSTR(ZGD.I,33,16)
   ELSE
      OUTVAR = COPIES(' ', 21) || " 33,16,EQ,C'" || SUBSTR(ZGD.I,33,16)

   IF I = ZGD.0 THEN
      OUTVAR = OUTVAR || ")" /* This is the last line, close paren. */
   ELSE
      OUTVAR = OUTVAR || ",OR," /* Another line to follow, continue */

   'EXECIO 1 DISKW ACCOUNT (STEM OUTVAR'                             
END                                                                  
'EXECIO 0 DISKW ACCOUNT (FINIS'                                      

1 行の入力の場合、次のようになります。

SORT FIELDS=COPY                                     
OMIT FORMAT=CH,COND=(33,16,EQ,C'8257310018808572')

複数行の場合、以下が生成されます。

SORT FIELDS=COPY                                     
OMIT FORMAT=CH,COND=(33,16,EQ,C'8257310018808572',OR,
                     33,16,EQ,C'8257310018076428',OR,
                     33,16,EQ,C'8257310017959681')
于 2013-12-12T18:39:14.560 に答える