} ◎I言語技術情報4(行制御命令)


行制御命令。
I言語はインタプリタと呼ばれる方法で動いています。 インタプリタは実行時にソースプログラムを解析して動くので、 細かな制御を動作環境に合わせて実行できます。 その特徴を利用した行制御命令を10種類用意しましたので説明します。
行制御命令は基本的には行を採用するかしないかを制御するものです。
(1)*コメント
先頭に'*'が書かれている場合はコメント行でこの行は採用されません。
尚、VER7.7からですが、プログラムの呼び出し時”ZZZZ_PROGRAM NOT LIKE '*%'”の条件を付けましたので、 1文字目を'*'にする事でプログラムの呼び出しではこの行は呼び出さないようになります。
(2)OS名1文字+...
W+でWINDOS、U+でUNIXの時採用します。尚、"+"を"-"にすると条件に合わないと逆に採用となります。
.NET Framework自身はOSに非依存ですが、たとえばパス名はWINDOWSではドライブ名が有る等、OSに依存する部分も存在するので用意しました。
(3)データベース名1文字+
M+でMicrosoft SQL Server、I+でIBM DB2、O+でOracle、P+でPostgreSQL、L+でMySQL、D+でFireBird,H+でHiRDBの場合採用します。
I言語で可能な限り共通で出来るようにしていますが、完全には同じに出来ない部分もあり用意しました。
(4)言語2文字+...
言語が一致した場合採用します。
メニューやデータ辞書は言語単位に存在するので、こちらで多くをカバー出来ますが、プログラムは同じ物を使うので用意しました。
(5)数字+...
  $数字+...
数字+はREPEAT=の繰り返し回数と一致した場合に採用します。
$数字+はREPEAT2=かREPEAT0=(REPEAT0=がある場合はREPEAT0=が優先)の繰り返し回数と一致した場合に採用します。
"1+2+"とした場合「かつ(AND)」の意味になりますのでこの行は1度も利用出来なくなります。
VER7.7以降ですが「又は(OR)」の機能も付けましたのでこの場合"1+|2+"で1回目2回目に採用されます。
一般的な動きと異なりORの機能はANDよりも先に行われたように動きますので注意が必要です。
たとえば"U+1+|2+"では先頭のU+(OSがUNIX)が不採用でそこに「|」が無いので、結果不採用となります。

(6)TEST+...
  INPUT+...
  OUTPUT+...
  NOT+...
  MENU_INPUT+...
  MENU_OUTPUT+...
それぞれの種類に一致した場合採用されます。
これにより、更新プログラムをメニューでコピー指定することでそのまま検索プログラムとして使う事が出来ます。
(7)%名前+...
  MINUS=%名前
  PLUS=%名前
細かな条件を付けたい場合に使用します、システム開発メニュー、システム管理メニューではテスト用と本番用の切り替えに使用しているので参考にして下さい。
(8)REPEAT0=[終了値][,初期値]
  REPEAT=[終了値][,初期値]
  REPEAT2=[終了値][,初期値]
REPEAT0=は次のREPEAT0=までを繰り返します。
REPEAT0=では繰り返す毎にプログラム中の$$、$-、$+が繰り返し数で置き換わります。
REPEAT=は次のREPEAT=またはREPEAT0=までを繰り返します。
REPEAT=では繰り返す毎にプログラム中の##、#-、#+が繰り返し数で置き換わります。
REPEAT2=は次のREPEAT2=,REPEAT=またはREPEAT0=までを繰り返します。
REPEAT2=ではREPEAT0=の中でない場合は$$、$-、$+が繰り返し数で置き換わります。
通常の命令も行制御命令も定義命令も全ての命令が繰り返し可能です。
繰り返し回数はプログラムの呼び出し時に確定している必要があるため、実行時での回数指定は出来ません。
実行時に繰り返し数が決まる場合は_COUNTERを使ってプログラムを組んで繰り返して下さい。 _COUNTERが変更されるとプログラムの$$、$-、$+が都度カウンターの内容で置き換わるのでREPEAT2=での繰り返しと同じ動きができます。
(9)NAME=[名前]
  NAME2=[名前]
  COPY=名前
NAME=で次の行から次のNAME=の前までを名前として記憶します。
NAME2=はNAME=内で更に細かく名前を設定できます。
COPY=で記憶された分をコピーします。
名前が同じ物は作れませんREPEAT=内で使用する場合は"NAME=名前##”等として名前が同じにならないようにして下さい。
(10)COMMENT_BEGIN
  COMMENT_END
広範囲にコメント化したい場合に使用します。
これ自体を行制御命令で”%名前ーCOMMENT_BEGIN”等採用、不採用に出来るので、結構便利です。
All Rights Reserved, Copyright (C) 2011-2011 Nobumichi Harasawa.