6.TcplinkマクロとISPF・SDSF(ASPEN)で不特定文字列を判定。制御する

By okada - Posted: 2017/01/08 Last updated: 2017/01/09 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
Tcplinkマクロは変数を使うことが出来ない事を今までに説明してきました。
そのため、Tcplinkマクロの中で文字列を判定する場合、直接判定すべき文字列を明示指定する必要があります。

<例> 画面上1行、1カラム目がABCであるかを判定・制御する処理

if string (01,01) “ABC”
jump true atari
:nasi

文字列ABCが無かった時の処理

jump tugi
:atari

文字列ABCがあった時の処理

:tugi

そのため、検索すべき文字列を明示指定できない不特定文字列の判定は難しいと思っていました。
(不特定の文字列の数が少なければ、上記のif string命令を複数回行う事で対応は可能でしたが、、)

そんな中、TSO(TSS)のISPF・SDSF(ASPEN)の機能特性を用いることで、不特定文字列の判定と制御ができる方法を見つけました。

Tcplinkマクロで不特定文字を判定・制御するためISPF・SDSF(ASPEN)の機能特性を確認する

不特定文字列の判定・制御の準備の前に、利用されているメインフレームエディタで機能特定を確認する必要があります。
ここで記載している「機能特定」ですが、これは
”メインフレームエディタで検索(FIND)や該当行の除外(EXCLUDE)命令を実行した際、対象の文字列が見つかった場合、該当行にカーソルが移動する事” です
zos(ISPF,SDSF)及びVOS3(ASPEN)は操作の経験があるので記載ができるのですが、MSPでも同様の動作をされると思われますので、活用できると思います

以下の4つの画面で説明します。本画面はzos(SDSF)のSEの画面です

画面1:JOBが実行された日付を検索するため、FINDコマンドを実行する時の状態です
(検索文字列は、後述しています)
%e7%84%a1%e9%a1%8c121

画面2:FINDで該当文字列が見つかると、該当する文字列にカーソルが移動します
%e7%84%a1%e9%a1%8c12

画面3:同じFINDコマンドですが、今度は見つからない文字列を指定した時の状態です
%e7%84%a1%e9%a1%8c111

画面4:文字列が見つからない場合、(画面では表示できていませんが)カーソルはコマンド入力領域の一番左に出ます
%e7%84%a1%e9%a1%8c2
画面下 ”02/15”の記載があります。これが現在のカーソル位置を示しています。FIND命令の実行後、02/15にカーソルが移った事を示しています 

このように画面2と画面4のカーソル位置の違いで、文字列の検索結果が判ります。Tcplinkマクロでは画面4のように02/15のカーソル位置にカーソルが無い場合、FINDで指定した文字列が見つかったと判定・制御ができます。

尚、特定の場所にカーソルがあるか否かの判定は、Tcplinkマクロのif cursor命令を使います。



不特定文字列を判定・制御するための準備

次に、FIND,EXCLUDE命令等で指定する文字列を事前にTcplink画面のどこかで作成する必要があります。
(Tcplink画面の外で作成した場合、Tcplinkマクロの中で文字列がクリップボードで渡せるようにTcplinkマクロを工夫する必要があります)

今回は、Tcplinkの空き画面(画面10)を使って文字列を作成します。空き画面の活用については14-3.非定型操作にてEXCEL(vba)とTcplinkマクロを連携する(空き画面活用編) を参照願います

画面5:検索用文字列作成例
%e7%84%a1%e9%a1%8c122

本画面はTcplink空き画面(画面10)で”2017/01/04” から ”04 JAN 2017”を作っています。
検索用文字列を作るために作成したTcplinkマクロが以下になります

01: open session TCP3270-Ses10
02: EDIT COPY (04,18) (04,19)
03: EDIT PASTE (04,21)
04: wait 1
05: EDIT COPY (04,10) (04,13)
06: EDIT PASTE (04,28)
07: ;
08: IF STRING (04,15) “01”
09: jump true iti
10: IF STRING (04,15) “02”
11: jump true ni
12: IF STRING (04,15) “03”
13: jump true san
14: IF STRING (04,15) “04”
15: jump true yon
16: IF STRING (04,15) “05”
17: jump true gou
18: IF STRING (04,15) “06”
19: jump true roku
20: IF STRING (04,15) “07”
21: jump true nana
22: IF STRING (04,15) “08”
23: jump true hati
24: IF STRING (04,15) “09”
25: jump true kyuu
26: IF STRING (04,15) “10”
27: jump true jyuu
28: IF STRING (04,15) “11”
29: jump true jyuuiti
30: IF STRING (04,15) “12”
31: jump true jyuuni
32: ;
33: :iti
34: string “JAN” (04,24)
35: jump owari
36: :ni
37: string “FEB” (04,24)
38: jump owari
39: :san
40: string “MAR” (04,24)
41: jump owari
42: :yon
43: string “APR” (04,24)
44: jump owari
45: :gou
46: string “MAY” (04,24)
47: jump owari
48: :roku
49: string “JUN” (04,24)
50: jump owari
51: :nana
52: string “JLY” (04,24)
53: jump owari
54: :hati
55: string “AUG” (04,24)
56: jump owari
57: :kyuu
58: string “SEP” (04,24)
59: jump owari
60: :jyuu
61: string “OCT” (04,24)
62: jump owari
63: :jyuuiti
64: string “NOV” (04,24)
65: jump owari
66: :jyuuni
67: string “DEC” (04,24)
68: jump owari
69: ;
70: ;
71: :owari

02-03行目で日付のコピー
05-06行目で西暦のコピー
08-30行目で月の判定を行い、該当月を省略形に変換します

04行目21カラムから31カラムに検索文字列が出来ましたので、画面1のFIND命令に使っています
Posted in Tcplinkマクロ活用 • • Top Of Page