メインフレームTips ~ISPFで複数行のコマンド作成~

ISPF,z/OS

はじめまして、システム基盤サービス部の田上です。

当社の「システム基盤サービス部」はIBM社のメインフレームを主体として扱っている部署です。お客様先でメインフレームの担当者の方と一緒に作業をしていると、何気なく行った操作を見て「そうゆう便利な使い方とかどうやって知るんですか?」とよく聞かれることがあります。

技術者が減少し続けているメインフレーム業界ですが、使っている人が確実にいるのも事実であり、情報が入手し難いという状況だと思います。そこで、この場を借りてメインフレームの小技を紹介していきたいと思います。

さて、第一弾となる今回ですが、メインフレームでリストのデータを基にある構文に従ってコマンドを作成するという場面がよくあるかと思います。1コマンド1行であれば、ISPFの置換機能を使って簡単に作成できますが、1コマンドが複数行にわたる場合、皆様はどうやっているでしょうか?

当社の技術者間でそんな話をしていたところ、いくつかの手法が出てきましたので、紹介いたします。

同じ構文の差し込み

同じ構文を差し込む場合であれば、行コマンドの"C","AK","A"を使うことで簡単に作成できます。

元データ

Command ===>                                                  Scroll ===> CSR  
****** ***************************** Top of Data ******************************
000100  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000200    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000300  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000400  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000500  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000600  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

コマンド入力

Command ===>                                                  Scroll ===> CSR  
****** ***************************** Top of Data ******************************
000100  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
C 0200    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
AK 300  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
AK 400  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
AK 500  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
A 0600  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

実行結果

Command ===>                                                  Scroll ===> CSR  
****** ***************************** Top of Data ******************************
000100  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000200    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000300  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000310    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000400  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000410    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000500  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000510    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000600  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
000700    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
****** **************************** Bottom of Data ****************************

2つのメンバを合体させる

上記の手法ですが、z/OS V1R10以降でないと使えないという話が出たところ、ISPFの行番号を生かした別のやり方が出てきました。

ちょっと前の議論なので、既にz/OS V1R10より前のOSを使っているお客様も少ないとは思いますが、2行目が同じ構文でなくても使える方法なので、紹介いたします。

具体的には1行目だけのメンバと2行目だけのメンバを作っておいて合体させるといったものですが、合体のしかたに座布団1枚な感じです。

メンバ1の準備

コマンドの1行目だけを書いたメンバを作成します。

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000100  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000200  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000300  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000400  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000500  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

メンバ1の RENUM

作成したメンバでコマンド行に RENUM と入力して実行し、行末(73~80カラム)の行番号を振り直します

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00001 00072 
Command ===> RENUM                                            Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000100  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000200  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000300  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000400  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000500  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

メンバ1RENUM実行結果(右端)

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00009 00080 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000100 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000200 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000300 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000400 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000500 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
****** **************************** Bottom of Data ****************************

メンバ2の準備

メンバ1の各行間に挿入したい行だけのメンバ(メンバ1と同行数)を作成します。

EDIT       ARK0001.JCLLIB(TEST2) - 01.00                   Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000100    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000200    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000300    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000400    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000500    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
****** **************************** Bottom of Data ****************************

メンバ2RENUM

メンバ1と同様にRENUMを実行し、 行末(73~80カラム)の行番号を振り直します 。

メンバ2RENUM実行結果(右端)

EDIT       ARK0001.JCLLIB(TEST2) - 01.00                   Columns 00009 00080 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000100 RKVL1)) CAT(CATALOG.MVSICFM        )                            00010000
000200 RKVL1)) CAT(CATALOG.MVSICFM        )                            00020000
000300 RKVL1)) CAT(CATALOG.MVSICFM        )                            00030000
000400 RKVL1)) CAT(CATALOG.MVSICFM        )                            00040000
000500 RKVL1)) CAT(CATALOG.MVSICFM        )                            00050000
****** **************************** Bottom of Data ****************************

2つのメンバを合体して作る

メンバ1のナンバリング機能の停止

まずはメンバー1のコマンド行にてNONUMを入力して実行し、ナンバリング機能を停止します。
※NONUMを実行しても73-80に振られた番号は残ります。

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00009 00080 
Command ===> NONUM                                            Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000100 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000200 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000300 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000400 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000500 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
****** **************************** Bottom of Data ****************************

NONUM実行結果(データ内容に変化無し)

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00009 00080 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000002 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000003 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000004 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000005 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
****** **************************** Bottom of Data ****************************

メンバ2の内容をメンバ1の末尾に追加

メンバ2の内容をCOPYコマンドでメンバ1の末尾に追加します。
※メンバ2も開いてCUTで持ってきたい場合はメンバ2側でもNONUMを実行してからCUTを実行してください。

EDIT       ARK0001.JCLLIB(TEST1) - 01.00                   Columns 00001 00072 
Command ===> COPY TEST2                                       Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000002  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000003  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000004  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
A 0005  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

追加結果(左端)

EDIT       ARK0001.JCLLIB(TEST1) - 01.01                   Member TEST2 copied 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000002  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000003  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000004  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000005  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
000006    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000007    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000008    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000009    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000010    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
****** **************************** Bottom of Data ****************************

追加結果(右端)

EDIT       ARK0001.JCLLIB(TEST1) - 01.01                   Columns 00009 00080 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000002 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000003 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000004 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000005 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
000006 RKVL1)) CAT(CATALOG.MVSICFM        )                            00010000
000007 RKVL1)) CAT(CATALOG.MVSICFM        )                            00020000
000008 RKVL1)) CAT(CATALOG.MVSICFM        )                            00030000
000009 RKVL1)) CAT(CATALOG.MVSICFM        )                            00040000
000010 RKVL1)) CAT(CATALOG.MVSICFM        )                            00050000
****** **************************** Bottom of Data ****************************

行番号を指定してのソート

上記の状態で、73~80桁目を指定してソートします。

EDIT       ARK0001.JCLLIB(TEST1) - 01.01                   Columns 00009 00080 
Command ===> SORT 73 80                                       Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000002 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000003 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000004 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000005 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
000006 RKVL1)) CAT(CATALOG.MVSICFM        )                            00010000
000007 RKVL1)) CAT(CATALOG.MVSICFM        )                            00020000
000008 RKVL1)) CAT(CATALOG.MVSICFM        )                            00030000
000009 RKVL1)) CAT(CATALOG.MVSICFM        )                            00040000
000010 RKVL1)) CAT(CATALOG.MVSICFM        )                            00050000
****** **************************** Bottom of Data ****************************

ソートの実行結果(左端)

EDIT       ARK0001.JCLLIB(TEST1) - 01.01                   Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000002    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000003  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000004    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000005  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000006    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000007  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000008    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
000009  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
000010    VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                            
****** **************************** Bottom of Data ****************************

ソートの実行結果(右端)

EDIT       ARK0001.JCLLIB(TEST1) - 01.01                   Columns 00009 00080 
Command ===>                                                  Scroll ===> CSR  
=COLS> -1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
****** ***************************** Top of Data ******************************
000001 NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     00010000
000002 RKVL1)) CAT(CATALOG.MVSICFM        )                            00010000
000003 NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     00020000
000004 RKVL1)) CAT(CATALOG.MVSICFM        )                            00020000
000005 NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     00030000
000006 RKVL1)) CAT(CATALOG.MVSICFM        )                            00030000
000007 NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     00040000
000008 RKVL1)) CAT(CATALOG.MVSICFM        )                            00040000
000009 NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     00050000
000010 RKVL1)) CAT(CATALOG.MVSICFM        )                            00050000
****** **************************** Bottom of Data ****************************

長めに作って折り返す

最近ISPFの資料を見ていてこの記事の内容としても使えるなぁと思い、実際に使っているやり方なのですが、1行1コマンドで作成しておいて、TFコマンドで折り返すというやり方を紹介します。

元データの作成

レコード長は72の倍数にしておくと使いやすいです。2行のコマンドを作る場合、2倍のLRECL=144のデータセットを作成して、中身を作ります。3行のコマンドであれば3倍といった感じで応用も可能です。(72桁目に文字が入る場合、倍数の基礎は73桁で考えてください)

作成するレコードですが、72桁目で折り返されることを想定して1行1コマンドで作成します。

作成したデータ(左端:コマンド1行目の想定)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.01              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000002  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000003  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000004  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000005  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

作成したデータ(右端:コマンド2行目の想定)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.02              Columns 00073 00144 
Command ===>                                                  Scroll ===> CSR  
=COLS> --+----8----+----9----+----0----+----1----+----2----+----3----+----4----
****** ***************************** Top of Data ******************************
000001   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
000002   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
000003   VOL(ARKVL2)) CAT(CATALOG.MVSICFM        )                             
000004   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
000005   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
****** **************************** Bottom of Data ****************************

余白を埋める

上記の作成データに対して単純にTFコマンドを実行すると、思いがけない位置で行の連結がされてしまいます。これを防ぐために、メンバ内に登場しない文字を使って余白を埋めておきます。以下は@で余白を埋めるために、1~71桁目及び、73桁目~143桁目を@で埋める作業です。

余白を埋める準備(左端)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000002  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
000003  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
000004  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
000005  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
000006  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

余白を埋める準備(右端)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00073 00144 
Command ===>                                                  Scroll ===> CSR  
=COLS> --+----8----+----9----+----0----+----1----+----2----+----3----+----4----
****** ***************************** Top of Data ******************************
000001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000002   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
000003   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
000004   VOL(ARKVL2)) CAT(CATALOG.MVSICFM        )                             
000005   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
000006   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
****** **************************** Bottom of Data ****************************

OverWriteで余白を埋める

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
C      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
OO      DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
        DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
        DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
        DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
OO      DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
****** **************************** Bottom of Data ****************************

余白を埋めた結果(左端)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000002 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P01@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000003 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P02@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000004 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P03@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000005 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P04@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000006 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P05@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
****** **************************** Bottom of Data ****************************

余白を埋めた結果(右端)

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00073 00144 
Command ===>                                                  Scroll ===> CSR  
=COLS> --+----8----+----9----+----0----+----1----+----2----+----3----+----4----
****** ***************************** Top of Data ******************************
000001 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000002 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000003 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000004 @@VOL(ARKVL2))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000005 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000006 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
****** **************************** Bottom of Data ****************************

72桁目で折り返す

先頭行はもう不要ですので、削除して次の行コマンドにTF72と入力して実行します。

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
D      @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
TF72   @DEFINE@NONVSAM(NAME(ARK01.DATASET.P01@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000003 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P02@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000004 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P03@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000005 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P04@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000006 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P05@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
****** **************************** Bottom of Data ****************************

実行結果

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P01@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000002 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000003 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P02@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000004 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000005 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P03@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000006 @@VOL(ARKVL2))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000007 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P04@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000008 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000009 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P05@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000010 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
****** **************************** Bottom of Data ****************************

後は余白を埋めるために使用した文字を削除して完了です。

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03              Columns 00001 00072 
Command ===> C @ ' ' ALL                                      Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
000001 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P01@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000002 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000003 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P02@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000004 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000005 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P03@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000006 @@VOL(ARKVL2))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000007 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P04@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000008 @@VOL(ARKVL1))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
000009 @DEFINE@NONVSAM(NAME(ARK01.DATASET.P05@@@@@@@@@@@@@@@)@DEVT(3390)@-@@@@ 
000010 @@VOL(ARKVL3))@CAT(CATALOG.MVSICFM@@@@@@@@)@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 
****** **************************** Bottom of Data ****************************

削除後の出来上がり

EDIT       ARK0001.JCLLIB.LONG(TEST1) - 01.03                CHARS '@' changed 
Command ===>                                                  Scroll ===> CSR  
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
****** ***************************** Top of Data ******************************
==CHG>  DEFINE NONVSAM(NAME(ARK01.DATASET.P01               ) DEVT(3390) -     
==CHG>   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
==CHG>  DEFINE NONVSAM(NAME(ARK01.DATASET.P02               ) DEVT(3390) -     
==CHG>   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
==CHG>  DEFINE NONVSAM(NAME(ARK01.DATASET.P03               ) DEVT(3390) -     
==CHG>   VOL(ARKVL2)) CAT(CATALOG.MVSICFM        )                             
==CHG>  DEFINE NONVSAM(NAME(ARK01.DATASET.P04               ) DEVT(3390) -     
==CHG>   VOL(ARKVL1)) CAT(CATALOG.MVSICFM        )                             
==CHG>  DEFINE NONVSAM(NAME(ARK01.DATASET.P05               ) DEVT(3390) -     
==CHG>   VOL(ARKVL3)) CAT(CATALOG.MVSICFM        )                             
****** **************************** Bottom of Data ****************************

終わりに

いかがでしたでしょうか?

使っているコマンドはマニュアルを読めば書いてある機能ではありますが、全ての機能を覚えている人はいないと思います。たくさんある機能のうちどの機能をどう使えば効率的に作業ができるのか。当社技術者が使っている小技をこれらも紹介していきたいと思いますので、必要な場面がありましたらぜひ参考にしていただければと思います。

  • Zabbix Enterprise Appliance
  • 低コスト・短納期で提供するまるごとおまかせZabbix