ThePIPSのAUTOプログラムで使える変数は、整数型変数がX1か
らX40、実数型変数はZ1からZ40、文字型変数はV1からV30までと
固定されています。プログラム作成においては、この決められた変数を上手に
組み合わせて使いこなさなければなりません。目的のプログラムを作成する過
程で、プログラムの設計を机上で行い、変数の割り振りを決めてコーディング
作業を開始する事が奨励されながらも実際に行っている人は皆無でしょう。私
を含めほとんどの人は、思い立つところからいきなりWP指令にてプログラム
を作成し始める事でしょう。変数の使用数が少なければ必要に応じて順番に変
数を使って行けば問題はないのですが、次第にプログラムが込み入ってくると
変数の使い方が乱雑になり、管理が大変になります。また、特にサブルーチン
化したり他のサブルーチンを参照したりする必要がでてきた場合には、変数が
重複してしまう様な問題に直面します。このような場合、今までに作成したプ
ログラムの変数内容を書き換える事を強いられます。このことを単純な文字変
換としてとらえた場合、ThePIPSの機能として、CU指令やWP指令中
の「文字編集」の「置換」機能を使用する事も可能です。
しかし実際に使うと、AUTOプログラムと言う特殊な文字列のために次のよ
うな不満が出てきます。
(1)該当以外の変数が変換されてしまう。
[EX]X1をX2に変換しようとすると、X10・X11・・等がX20
・X21・・と変換される。
(2)複数種類の変数を入れ換える場合の操作に注意が必要であり大変面倒で
ある。
[EX]X1をX2・X2をX1にする場合、一度にX1をX2に変換して
しまうと、次にX2をX1に変換する時に、前にX1からX2に変
換したX2の内容もまたX1に戻ってしまう為結果が得られない。
X1を一時別の文字に換えて(但し、同一のプログラム内で使用さ
れていない文字列でなければならない)X2をX1に変換し、一時
的に他の文字列に対比していた元のX1をX2に変換する。
そこで、今回はAUTOプログラムの変数を一度に変換してしまうAUTOプ
ログラムを作成します。
つまり[資料1]<VEXC>実行元サンプルプログラムの様な内容を[資料
2]変数変換定義表(サンプル)の内容に従い変数を自動的に書き換え、[資
料3]実行後サンプルプログラムにする。
以前に紹介しました、変数リファレンステーブル作成プログラム<VRT>と
併用して利用される事をお勧めします。
AUTOプログラム<VEXC>仕様
1.主画面にあるプログラムに対してプログラム全体、行番号指定での一部指
定範囲に対して変数の変換を実行できる。
2.変数の変更内容は、以前紹介しました(ソードマガジン’95年9月号)
変数リファレンステーブル作成プログラム<VRT>での変数テーブル表
を利用し、これに必要な列を追加して活用します。サブ画面を作業エリア
として使用します。実行後はサブ画面のデータは削除されますので注意が
必要です。
3.変換表は元の変数名(変数列)と、変更したい変数名(変更列)を指定し
て実行させる事で、中間変更名(WORK列)を自動的にセットし使用行
番号の列に変換をした行番号をセットする。[資料2]変数変換定義表
4.変換表は<VRT>プログラムの結果(変数リファレンステーブル)を事
前にサブ画面に用意していても処理できるようにする。また再実行する事
も考慮する。実行スピードを上げるために変換に関係しない行の削除を指
定できるようにする。
5.変換にて文字数が増える場合がある。(EX:X1をX11にする場合1
桁字数が増す)この場合プログラムの右端が桁溢れし消える場合があるが
実行そのものは無視して行う。但し、使用行番号列に変更行番号をセット
する時は「マイナス」符号を付加し注意を与える。
6.中間変換文字の指定は自動的にプログラム上で行う。文字列桁数を2桁に
固定し1文字目は変換範囲に使用されていない文字とする。
標準として” ̄”文字を使用しプログラム上で使用されている場合はAS
CIIコード を1つずつ進めていく。2文字目は”!”文字から順にコ
ードを進め自動的に割り付けていく。この文字を変換表のWORK列にセ
ットし実行する。
<VEXC>プログラム概要
[資料4]<VEXC>プログラムリスト・[資料5]<VEXC>プログ
ラム変数リファレンステーブルを参照の上補足的な説明を致します。
【2〜5行目】変数V5には、変数変換テーブル表の元となるページ指定。ソ
ードマガジン95年9月号で紹介しました<VRT>プログラムでのAUTO
プログラム変数リファレンステーブルと同じ環境を指定して下さい。変数X7
,X8,X9は、作業用に使う一時書き換えよう文字コードで、X9は1文字
目コード、X8は2文字目コード、X7は2文字目コードの最終コード。AS
CII関数は対象文字のJIS(キャラクター)コード番号を得る。
【6〜15行目】処理を開始する行番号を変数V1に入力させる。[ESC]
を押した場合は$終了へ飛ぶ。[ENTER]のみは、行番号1からに自動設
定し数字指定で画面上のデータ最終行番号以内は次の処理へ飛び、文字指定の
場合は、プログラム名の検索のため1行目から最終行番号までの行内容を指定
文字列でのプログラム名を探す。該当がなければエラー処理へ飛び再入力をす
る。変数X10は最終的な処理開始行番号となる。
【16〜25行目】処理を終了する行番号を変数V2に入力する。[ESC]
を押した場合は$終了に飛ぶ。変数V2が[ENTER]のみで有れば最終行
を探す処理($ERST)へ飛ぶ。変数V2が数字で有れば、テーブルの入力
処理($TBIP)へ飛ぶ。変数X11は処理終了行を格納する為のもので、
範囲が変数X10未満で最終行(E)より大きい場合は範囲外のためエラー処
理へ飛ぶ。変数V1にプログラムのタイトルの検索をするための条件をセット
し処理開始行番号の次から最終行番号までの間を探す。検索が終了した場合プ
ログラム名で終了した場合はその行の1行前までが対象行となる。
【26〜35行目】画面をスワップし既に変換定義表が有るかどうかの確認を
する。文書形式で有れば変換定義表は有り得ない。次に変換定義表として最低
必要な列の存在を確認する。変数X25はエラーを累積するためのものでエラ
ーが最終的になければ変換定義表が存在していると言える。定義表がない場合
には、読込を促進する為の入力選択をし読込をしない時と[ESC]を押した
時は$終了へ飛ぶ。
【36〜40行目】変数X19は、WORK・変更と言う2つの列を挿入する
のに必要な桁数。列の桁数と縦罫線で各列5桁必要。WORK列が有ればこの
列を挿入しないでよい為変数X19は5桁少なくて良い。同じく、変更列が有
ればX19は5桁少なくて良い。変数X19が0と言うことは挿入しなくて良
いため入力処理$TGIPへ飛ぶ。
ページの横桁数[STATUS(1,2)]から使用桁数[STATUS(1
,6)]を引いたものが変数X19よりも大きい時は列の挿入が可能であるた
め列作成処理$CAPRへ飛ぶ。
【41〜50行目】現在の使用行数を変数X15に求め、画面の最大面積(1
4Kb)を変数X15で割ると設定可能な最大横桁数が求められ変数X20に
セットする。変数X20が1024より大きいときは横桁の最大が1024で
有るため1024に一致させる。最大設定可能桁数から今の使用桁数[STA
TUS(1,6)]を引いたものが変数X19以上で有ればINFO指令にて
変更できる為、$IFPRへ飛ぶ。変数X19桁数確保出来ない場合に
は、余裕のある列の桁数を短縮する必要がある。そのため「仕様・内容」列が
通常大きく取っているのでこの列より必要な桁数小さくした桁数を変数X21
に求め。この桁数が10以上で有ればCF指令にて桁数を変更する。それ以外
は処理不能になりエラー表示し終了する。
【51〜55行目】「WORK」列の存在を、列番号を求めるCN関数にてエ
ラー22があった場合は無しと判断する。存在しないときは、「使用行番号」
列の前に桁数4で挿入する。同様に「変更」列の存在を確認し無ければ、「使
用行番号」列の前に桁数4で挿入する。
【56〜61行目】WC指令でのENTRY機能を使い「変更」列に、新しい
変数名をを入力させる。「WORK」と「使用行番号」列を空白にし、表のデ
ータ開始と終了行を変数X4,5にセットし、変更列の空白行スイッチ変数を
初期化する。変更列の空白行が有れば行を削除するための@参照列を変更列に
し、それ以外は空白行スイッチを1にしラベル$JMP2に飛ぶ。
【62〜69行目】変更処理に関係しない行を削除するかの確認(関係の無い
行があると処理に時間がかかるために)。[ESC]で終了。エラーメッセー
ジとエラー処理後の戻りラベル名指定。入力指定がにより行を削除し空白行ス
イッチを1にする。
【70〜71行目】変数X4,5にデータ開始、終了行番号をセットし、空白
行スイッチが1(空白行がない時)はラベル名$JMP2へ飛ぶ。
【72〜77行目】対象データ行の開始、終了を求めるために、変数X4,5
に最大、最小行番号をセットし、開始行から最終行までを変更列が空白で有れ
ば更新する。
【78〜84行目】変換一覧表をサブ画面に移す。WORK用文字の有無の確
認の為、処理開始、終了行番号内の文字列を比較する。
【85−120行目】プログラムリストの変更処理対象行番号のループ。
【86〜88行目】変数V12へ処理行の取り込みと変更対象データの有無ス
イッチの初期化。処理中行番号の表示。
【89−119行目】元変数名をWORK名に変える処理と、WORK名を新
変数名に変える処理の切換。
【90−118行目】変更一覧表の開始、終了行番号のループ。
【91行目】WORK名から新変数名の書換時で変更対象がなかった場合はラ
ベル名$NXT2へ。
【92〜96行目】サブ画面の変更列の内容を取り込み内容がないか罫線時は
ラベル名$NXT0に飛ぶ。WORK名に変更時で変数X2が初回の時以外は
ラベル名$JMP5に飛ぶ。WORK文字の組立をし、サブ画面のWORK列
にセットし変数X8を次のWORK文字作成の準備とし1を追加する。変数X
8がX7より大きくなるとWORK文字列作成限界でエラー処理へ飛ぶ。
【97〜98行目】元変数名からWORK名に変更する時点では、変数V8に
WORK文字を、変数V11に元変数名をセットする。WORK文字から新変
数名に変換するときは、変数V8に新変数名を、変数V11にWORK文字列
をセットする。
【99〜104行目】文字検索開始の初期値桁数を変数X13にセット。変更
文字を検索、変数X12が0の時は該当無しでラベル名$NXT0に飛ぶ。
検索変数番号が1桁でWORK文字に変える時は、次の文字が数字で有れば該
当変数でないためにラベル名$EXC3へ飛ぶ。
【105〜109行目】変数X12が1の時は1桁目から該当変数があるため
に該当変数を外した右側文字列と変更文字列に置き換え変数V12に組立てる
。該当変数が変数V12の中間に有る場合はその左側と右側の間に変更文字列
を入れて組立てる。一番右側に該当変数がある場合は、左文字列と変更文字列
を組立てる。この処理を通過するという事は変換を行った事なので変数X16
のスイッチを1にする。処理後の文字列を元の行に戻す。
【110〜111行目】処理後に戻す文字列が桁数が増えた時で、画面桁数以
上になった場合は内容の一部が消えるため、注意を与えるため変換行番号の符
号をマイナスにする。2回目処理(WORK文字から新変数にする時)で桁溢
れが無い場合はラベル名$EXC3へ飛ぶ。
【112〜117行目】使用行番号の更新のためサブ画面の変更一覧表の使用
行番号列の内容を変数V13に読み込む。現在処理中の行番号が既にセットさ
れていればラベル名$EXC3へ飛ぶ。使用行番号覧が空白の時は行番号区切
りが必要ないため、変数V14を空白にする。それ以外は区切り記号「/」を
セットする。現在の内容に今回の行番号をセットしサブ画面の表に書込。同じ
行の残り文字列を検索するために変数X13を処理終了の次の桁数にセットす
る。セットした桁数が検索文字列の桁数より小さければラベル名$EXC2に
戻り処理を継続する。
【121〜122行目】DISP画面を閉じ、ST
OP文に飛ぶ。
【124〜129行目】エラー処理ルーチン。
<VEXC>プログラムの操作方法
変数の変更処理を行いたいプログラムを画面に呼び出しておきます。
[資料1]のプログラムを[資料2]の内容にて変数変換を行う操作を例にご
紹介します。
(1)AUTOプログラムを動かします。
VEXC[ENTER]
(2)処理プログラム名(・・・)
[ENTER]
プログラム名の指定、行番号の指定が可能です。
(3)処理終了行番号・・・
[ENTER]
行番号指定と使い分けて下さい。[ENTER]の時は自動的に開始行
からのプログラムの範囲内となります。
(4)[資料2]の表が画面に表示されますので変更列の該当変数行に新しい
変数名を入力して下さい。変更しないところは空白の状態で、WORK
列は入力しないで下さい。入力が終了すると[ESC]で終了します。
(5)変更無指定の行を削除してもいいですか?
[ENTER]
空白行が多い場合には処理時間が多くかかりますのでできる限り空白行
を消すように操作して下さい。再処理の場合には、(4)の操作中はW
指令中なのでプルダウン処理の行挿入などの機能を使う事も可能です。
(6)最終的に処理が出来たら、サブ画面の使用行番号列で桁溢れ等の確認を
して元のプログラムページに登録して下さい。