13.Tcplinkマクロで処理した結果を再びPCに持ってきて後処理する。

By 岡田 - Posted: 2016/09/07 Last updated: 2016/09/17 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
12-2までの処理でvbaで作成したTcplinkマクロを実際に実行するところまで、前回は説明しました。

今回はTSO画面の結果をPCに持ってくるところの説明です。

「TSO画面の結果を持ってきて後処理」となると漠然としすぎていますので、実際に処理している内容の一部を改変してご説明する事にしました

メインフレームで使っているボリュームの使用率をPCで管理する

メインフレームの作業に従事している私は、使用許可されているボリュームが限定されています。
ジョブの中間ワークだったり、業務と業務の間の連携用データセットを保管するボリュームです。

このボリュームの空き容量が少なくなると、実行する業務に支障がでるため、日々使用量を監視して逼迫したボリュームは不要なデータセットの削除や他のボリュームにデータセットを引越しさせるなどの対処を行います。

Z/OS(ISPF)ではボリュームの使用率をメニュー3→4でV(VTOC情報の表示)で確認します。
VOS3ではASPENのメインメニューから6→6の@LISTVOLで出します。

今回はZ/OS(ISPF)の処理ついてご説明します
処理内容は以下のとおりです。

1)ISPF(VTOC情報の表示)で表示する画面の使用率の部分を別の区分メンバに集約
A)ISPFで区分メンバを編集モードで開く
B)SPLITで画面を切り替え、VTOC情報の表示を実行、特定ボリュームの使用率を画面に出す
C)特定行をコピー、SPLITコマンドで再び区分メンバに移り、書き込む

※複数ボリュームがある場合、上記B),C)を繰り返す

2)1)のメンバを更新後、TcpLinkのreceive命令でパソコンにダウンロード
3)EXCELに取り込む

<はじめにTcplinkマクロです>
01: change session TCP3270-Ses01
02: ;window minimum
03: ;
04: :
05: :
06: LOGON 処理からISPFメインメニューまで
07: :
08: :
09: string “2”
10: emulator key [enter]
11: until input
12: wait 1
13: string “‘抽出結果を格納する区分データセット名'” (14,26)
14: emulator key [enter]
15: until input
16: wait 1
17: string “F VOLUSE”
18: emulator key [enter]
19: until input
20: wait 1
21: string “S” (06,2)
22: emulator key [enter]
23: until input
24: wait 1
25: string “RES”
26: emulator key [enter]
27: wait 1
28: ;;;
29: move cursor (01,12)
30: until input
31: emulator key [PF2]
32: until input
33: ;
34: ;SPLITでISPFメインメニュー
35: ;
36: string “3”
37: emulator key [enter]
38: until input
39: wait 1
40: string “4”
41: emulator key [enter]
42: until input
43: wait 1
44: string “V”
45: until input
46: wait 1
47: string “AAAAAA” (11,31)
48: emulator key [enter]
49: wait 1
50: edit copy (10,20) (10,77)
51: wait 1
52: ;
53: move cursor (01,12)
54: until input
55: emulator key [PF2]
56: until input
57: wait 1
58: string “AAAAAA ” (04,09)
59: wait 1
60: edit paste (04,16)
61: wait 1
62: ;;;
63: move cursor (01,12)
64: until input
65: emulator key [PF2]
66: until input
67: wait 1
68: emulator key [PF3]
69: until input
70: wait 1
71: string “BBBBBB” (11,31)
72: emulator key [enter]
73: wait 1
74: edit copy (10,20) (10,77)
75: wait 1
76: ;
77: move cursor (01,12)
78: until input
79: emulator key [PF2]
80: until input
81: wait 1
82: string “BBBBBB ” (05,09)
83: wait 1
84: edit paste (05,16)
85: wait 1
86: move cursor (01,12)
87: until input
88: emulator key [PF2]
89: until input
90: wait 1
91: emulator key [pf3]
92: until input
93: wait 1
94: string “CCCCCC” (11,31)
95: emulator key [enter]
96: wait 1
97: edit copy (10,20) (10,77)
98: wait 1
99: ;
100: move cursor (01,12)
101: until input
102: emulator key [PF2]
103: until input
104: wait 1
105: string “CCCCCC ” (06,09)
106: wait 1
107: edit paste (06,16)
108: wait 1
109: move cursor (01,12)
110: until input
111: emulator key [PF2]
112: until input
113: wait 1
114: emulator key [pf3]
115: until input
116: wait 1
117: ;
118: string “DDDDDD” (11,31)
119: emulator key [enter]
120: wait 1
121: edit copy (10,20) (10,77)
122: wait 1
123: move cursor (01,12)
124: until input
125: emulator key [PF2]
126: until input
127: wait 1
128: string “DDDDDD ” (07,09)
129: wait 1
130: edit paste (07,16)
131: wait 1
132: ;
133: ;FILE TRANS PROCESS
134: ;
135: emulator key [pf3]
136: until input
137: wait 1
138: emulator key [pf3]
139: until input
140: wait 1
141: emulator key [pf3]
142: until input
143: wait 1
144: ;
145: ;(TOP MENU)
146: ;
147: string “6”
148: emulator key [enter]
149: until input
150: wait 1
151: receive “C:\temp\VOLUSE.txt” ‘抽出結果を格納する区分データセット名(VOLUSE)’ [jiscii crlf
152: WAIT 10
153: ;
154: :
155: :
156: LOGOFF 処理
157: :
158: :


※LOGON、LOGOFF処理は各自で挿入してください

VTOC情報を一時保管する区分データセット(VOLUSE)を開く

09: string “2”
10: emulator key [enter]
11: until input
12: wait 1
13: string “‘抽出結果を格納する区分データセット名'” (14,26)
14: emulator key [enter]
15: until input
16: wait 1
17: string “F VOLUSE”
18: emulator key [enter]
19: until input
20: wait 1
21: string “S” (06,2)
22: emulator key [enter]
23: until input
24: wait 1
25: string “RES”
26: emulator key [enter]
27: wait 1

ISPFのTOPメニューから2(編集)を選択後、オープンするデータセットに13行目の区分データセット名を入れ、表示されるメンバ一覧から17行目のVOLUSEを選択するものです。25行目から27行目はインフォメーションメッセージを消すための措置なので、RESの必要のない場合ははずしてかまいません

13行目の区分データセットは各自で変えてください

特定ボリュームのVTOC情報を表示、ワークデータセットに画面情報を書き出す

特定ボリューム(上記ではAAAAAAからDDDDDDの4ボリューム)のうち、BBBBBB以降は繰り返しになりますので、AAAAAAについて説明します

29: move cursor (01,12)
30: until input
31: emulator key [PF2]
32: until input
33: ;
34: ;SPLITでISPFメインメニュー
35: ;
36: string “3”
37: emulator key [enter]
38: until input
39: wait 1
40: string “4”
41: emulator key [enter]
42: until input
43: wait 1
44: string “V”
45: until input
46: wait 1
47: string “AAAAAA” (11,31)
48: emulator key [enter]
49: wait 1
50: edit copy (10,20) (10,77)
51: wait 1
52: ;
53: move cursor (01,12)
54: until input
55: emulator key [PF2]
56: until input
57: wait 1
58: string “AAAAAA ” (04,09)
59: wait 1
60: edit paste (04,16)
61: wait 1

29行目から43行目で、以下の処理をしています。
29行目から32行目・・・全画面に対してSPLITコマンドを実行し、裏画面の状態でメインメニューを出します
画面イメージは以下の通りです
ispf%e3%83%a1%e3%82%a4%e3%83%b3

※私がテストした時は、SPLITの裏画面が全画面表示できるようにISPFの設定を変えています。各自の設定を確認して下さい。
ISPFの設定画面の”分割画面の常時表示”の設定をOFFにすると、SPLITの裏画面が全画面表示できるようになります。
ISPFの画面SPLITは行単位で操作が可能ですが、VOS3のSPLITは全画面SPLITしか出来ません。SPLIT時は画面右上にSPLITのメッセージが出ていた記憶があります。

36行目から43行目・・・メインメニューから3→4にてボリューム情報を処理できる画面にします
画面イメージは以下の通りです
ispf%e2%86%923%e2%86%924

44行目から51行目・・・ボリューム情報処理画面にてAAAAAAのVTOC情報を表示する操作を行い、画面に情報を表示します。
画面の情報から50行目にて10行,20カラム目から77カラム目までをクリップボードにコピーします(コピー範囲は一瞬画面に白枠で表示されます)
画面イメージは以下の通りです
ispf_volv

53行目から61行目にてSPLITで表画面を開き、VOLUSE区分データセットの4行目(メンバの1行目)に情報を書き出します
AAAAAAからDDDDDDまで繰り返し書き出したときの画面イメージは以下の通りです
%e3%83%af%e3%83%bc%e3%82%af%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab

VOLUSEの情報をパソコンにダウンロード

132: ;
133: ;FILE TRANS PROCESS
134: ;
135: emulator key [pf3]
136: until input
137: wait 1
138: emulator key [pf3]
139: until input
140: wait 1
141: emulator key [pf3]
142: until input
143: wait 1
144: ;
145: ;(TOP MENU)
146: ;
147: string “6”
148: emulator key [enter]
149: until input
150: wait 1
151: receive “C:\temp\VOLUSE.txt” ‘抽出結果を格納する区分データセット名(VOLUSE)’ [jiscii crlf
152: WAIT 10

151行目のreceive(Tcplinkコマンド)でファイルをダウンロードしたいのですが、これにはコマンドを実行する領域が必要です。
そこで、131行目までに表示していたVOLUSE画面を閉じて、メインメニューに戻り、6の画面に移動して処理をするようにしています。
147行目の時点でISPFメインメニューに戻っている事を確認して下さい(確認する処理は省略しています)

ダウンロードしたファイルのイメージは以下のようになります
AAAAAA 4 使用率 . : 4 最大 . . : 35,100 2,340
BBBBBB 51 使用率 . : 9 最大 . . : 8,295 553
CCCCCC 64 使用率 . : 1 最大 . . : 17,968 1,197
DDDDDD 0 使用率 . : 1 最大 . . : 49,005 3,267

1カラム目から6カラム目・・・抽出対象のボリューム
8カラム目から10カラム目・・・ボリュームの使用率(%)
33カラム目から36カラム目・・・VTOC領域の使用率(この数字が100%になると、ボリューム使用率が少なくてもデータセットの新規割り当てが出来ない)
52カラム目から57カラム目・・・連続して空いている領域で最も大きいサイズ(トラック) この数字が少ない場合、デフラグの検討をする
60カラム目から65カラム目・・・ 同上(シリンダ)

ダウンロードしたファイルをEXCELに取り込む

EXCELにてテキストファイルを取り込みます。
パソコン上でのファイル名が特定されている事、ファイル自体もカラム位置が定まっているため、left,mid,right関数を使って特定セルに書き出す事ができます

excel(vba)でテキストファイルを読み込む方法は複数あるのですが、今回はLINE INPUTを使うことにします。1行1行処理しますので、わかりやすいです

c:\temp\VOLUSE.TXTを読み込むvbaは以下の通りです

01: Sub VOLUSE_READ()
02: Dim buf As String, n As Long
03: Open “C:\temp\voluse.txt” For Input As #1
04: Do Until EOF(1)
05: Line Input #1, buf
06: n = n + 1
07: Cells(n, 1) = buf
08: Loop
09: Close #1
10: End Sub

vbaを実行すると、以下のようになります(フォントはMSゴシックにしています)
voluse


次回は拡張編の最後とします。
今回は特定ボリュームの使用率を取得する方法でしたが、Tcplinkの中に特定ボリュームを指定しているため、定型的操作でした
次回は不定型操作について書きます
EXCELのセルに記載しているJOB番号からSDSFでジョブ名を取得、EXCELに持ってくる手法を書きます
Posted in Tcplinkマクロ活用(拡張編) • • Top Of Page