日立(VOS3)のCLISTの特殊機能その2(多分岐:条件分岐)

By 岡田 - Posted: 2014/03/14 Last updated: 2014/03/14 - Leave a Comment
印刷用ページの表示 印刷用ページの表示
こんにちは、、

VOS3のCLISTで私が導き出した特殊機能その2である「多分岐(条件分岐)」についてご説明します。

多分岐を高級言語で書く場合、selectやswitch文等で簡単に実現できますが、CLISTですとIF文を多く(分岐先の数)書かないと実現できません。

そして、この機能はその1の「配列変数」と違い、VOS3単独では実現できません。
VOS3のPPである「TMP4 E3」が提供するコマンド(&@INSTR)が必要となります。

TMP4 E3:VOS3が持つTSS(TSO)の機能を拡張するためのプログラムプロダクトです。
&@INSTR以外にも&@HEAD、&@BODY、&@TAILがあり、これはEXCELの「LEFT」「MID」「RIGHT」と同じような機能を持ちます(詳細は割愛します)

TMP4 E3のプログラムプロダクトは殆どのVOS3システムに組み込まれていますので、ご安心ください。(VOS3/USのセット型名にも含まれています)

この機能のポイントを2つご説明します
1)&@INSTRにて文字列の中から特定の文字が存在する場所(カラム位置)を特定する
2)GOTO先のラベル名に変数を用いる

また、重要性は低いですが、CONTROL文で宣言する記号「CHAR」「COLUMN」も関連しています(この記号も「TMP4 E3」が提供しています

CLISTの例題です
—-+—-1—-+—-2—-+—-3—-+—-4—-+—-5—-+—-6—-+—-7—-+—-8
01 PROC 0
02 CONTROL CONLIST LIST SYMLIST CHAR
03 SET &A = 東京
04 SET &CNARLIST = 北海道東京名古屋大阪福岡
05 SET &AN = &@INSTR(&CHARLIST,&STR(&A))
06 GOTO L&AN
07 GOTO OWARI
08 L1: WRITE “1”
09 GOTO OWARI
10 L2: WRITE “2”
11 GOTO OWARI
12 L3: WRITE “3”
13 GOTO OWARI
14 L4: WRITE “4”
15 GOTO OWARI
16 L5: WRITE “5”
17 GOTO OWARI
18 L6: WRITE “6”
19 GOTO OWARI
20 L7: WRITE “7”
21 OWARI: EXIT

このCLISTでは&Aに格納されている”東京”を&CHARLISTから探して、発見した場所の数字を用いて、多分岐を実現させています

ここで、”東京”という漢字を例題に選択したのには理由がございます。

VOS3の世界では文字を制御する場合に、”1文字を1”として扱う場合と”1バイトを1”として扱う場合があるからです。(ユーザ自信が制御可能です)

02行のCONTROL文の最後に書いたCHARを指定した場合、”1文字を1”として制御します
したがって、”東京”は&CHARLISTの4文字目にあたるため、6行目ではL4にジャンプする事になります

しかし、02行のCONTROL文の最後に書いたCHARを”COLUMN”に変更すると、文字の扱いが変わり”1バイトを1”に変わります。(漢字開始文字や終了文字はカウントされません)
漢字の場合、2バイトで1文字のため、”東京”は&CHARLISTの7バイト目になり、6行目ではL7にジャンプします

&CHARLISTに書かれていない文字を検索した場合、結果は”0″になりますので、L0のジャンプ先を作ってください(これがswitch文のdefaultに相当します)

※漢字開始文字などもカウント対象にしたい場合、CHAR,COLUMNの代わりに別のオペランドを書くことになりますが、忘れました(BYTEだったかも、、)。TMP4 E3のマニュアルを参照できるかたはご確認してください。


Posted in 日立VOS3システム編 • • Top Of Page