

メインフレームTips ~ISPFで複数行のコマンド作成~
はじめまして、システム基盤サービス部の田上です。
当社の「システム基盤サービス部」は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 ****************************
終わりに
いかがでしたでしょうか?
使っているコマンドはマニュアルを読めば書いてある機能ではありますが、全ての機能を覚えている人はいないと思います。たくさんある機能のうちどの機能をどう使えば効率的に作業ができるのか。当社技術者が使っている小技をこれらも紹介していきたいと思いますので、必要な場面がありましたらぜひ参考にしていただければと思います。