EXPRFL バッファしながら行をTSEXPRで計算

書法

EXPRFL expr [filename]* [option]*

SHELLMODE

@記述、!記述、^記述、#記述

詳細

第一パラメータをTSEXPR式の連続として解釈して、 入力ファイルの各行に対して計算し、標準出力する。
ファイル名を省略すると標準入力を扱う。
通常は式の値を常に出力するが、出力を抑制する検定モードを指定できる(-P)。

 現在行を含め、以降数行を行バッファに保持して式を呼び出す。 オプション(-L)で保持行数を指定できる。デフォルトは 16 行。
式の一回の評価ごとに、1行ずつバッファの先頭を掃きだし、バッファの末尾に行を補充する。この行数を指定できる(-K)。

 基本的には行処理だが、数行のスパンで後続の行内容を検定できる。複数行にまたがる形式をその先頭行で捕らえる使い方に向いている。
 また、掃き出し行数を動的に指定できるので、不特定行長のレコードの取り扱いも可能である。

式記述

{ TSEXPR式; }+
TSEXPR式を;で区切って第一パラメータに記述する。
アプリケーションインタフェース

 アプリケーション・インタフェースは次の通り

引数略記変数名説明
0 @0 バッファ内の行を連結した文字列。各行末には0x0aが付いている。
1以上 @n バッファ内の行に1から順に項目に対応
-1 &(-1) ??gln 通算入力行番号
-2 &(-2) ??ln ファイル内入力行番号
-3 &(-3) ??grn 通算処理番号
-4 &(-4) ??rn ファイル内処理番号
-5 &(-5) ??fn ファイル番号
-6 @(-6) ??filename 処理中のファイル名
-7 &(-7) ??bc バッファ内行数
??print 出力の許可状態を表す論理値。 行の計算式、初期化式などそれぞれの場合に固有である。
??print := bool
この変数に論理値を代入することで出力の可否を制御できる。
??kick バッファの掃き出し行数。
??kick := int 行数
この変数に正の整数をセットして掃き出し行数を変更できる。
行評価では、この値は実際に掃きだす行数。
初期化/終了化では、この値はオプションで設定した掃き出し行数で、この値が行評価の際に毎回セットされる。
??break 処理中断要求を表す論理値。 各ファイル処理の先頭で偽に設定される。
??break := bool
この変数に論理値を代入することで中断要求を制御できる。
行処理での設定では、同一ファイルの次行以降の処理を行わなくなる。
ファイル開始処理での設定では、現在のファイルの行処理をすべて行わなくなる。
??allbreak 全中断要求を表す論理値。
??allbreak := bool
この変数に論理値を代入することで全中断要求を制御できる。
行処理での設定では、同一ファイルの次行以降の処理を行わなくなる。
ファイル開始処理での設定では、現在のファイルの行処理をすべて行わなくなる。
また、次以降のファイルの処理も行わない。
bool SPOOL(str 文字列 ) 文字列を直接出力する。

以下の SYSTALK 関数は、使用する必要がない。変数アクセスで代替できる。
機能番号記法説明
0 SYSTALK(0,n) n は整数。バッファの掃きだし行数を指定する。この機能を使用せず、??kick を使用すること。
1 SYSTALK(1,x) x はなんでも良い。この処理で終了する。この機能を使用せず、 ??break を使用すること。

 標準では、各式の間に改行を挟み、さらに、式処理の終わりに改行を行う。また、式処理の空行の出力は極力抑制される。

動作モード

オプション(-P)で検定モードを指定できる。

通常モード
式をすべて評価し出力する。
検定モード
検定モードでは、第一式が検定式となり、この式の値が 真(TRUE)になる場合だけ、第二式以降を評価し出力する。従って、第一式の型は論理型でなければならない。

OPTION

-B{tsexpr;}+
ファイル処理の最初に実行する式を書く。各式は「;」で区切る。
-E{tsexpr;}+
ファイル処理の最後に実行する式を書く。各式は「;」で区切る
-F{tsexpr;}+
全体の処理の最後に実行する式を書く。各式は「;」で区切る。
-I{tsexpr;}+
処理の最初に実行する式を書く。各式は「;」で区切る。デフォルトでは出力しない。
-Knumber
バッファの掃きだし行数を指定する。バッファ行数を越える値を指定すると、バッファ行数を掃きだし行数に揃える。掃きだし行数のデフォルトは 1 。
-Lnumber
バッファ行数を指定する。バッファ行数のデフォルトは 16 。
-L{S|C|L}
1行を入力する際のコードの扱いを指定する。
-LSデフォルト。不要のコードを除去。LFを行末とみなす。CRは無視する。
-LCコードの変更をしない。CRLFを行末として扱う。
-LLコードの変更をしない。LFを行末として扱う。
-NOEOL
出力時にレコード末の改行を抑制する。(レコード末での改行の刈り込みも行わない)
-Ofilename
出力を指定のファイルに切替える。
-P
検定モードに切り替える
-Rstr
出力用のレコード区切りコードを指定する。正規表現で書く。デフォルトは、空行を出力するために二つの復帰改行 (\r\n\r\n)に設定されている。
-S[+|-]
各行の出力を抑制する(-S、-S+)。または、抑制を解除する(-S-)。
-SB[+|-]
ファイル開始処理の出力を抑制する(-SB、-SB+)。または、抑制を解除する(-SB-)。
-SE[+|-]
ファイル開始処理の出力を抑制する(-SE、-SE+)。または、抑制を解除する(-SE-)。
-SI[+|-]
全体の開始処理の出力を抑制する(-SI、-SI+)。または、抑制を解除する(-SI-)。
-SF[+|-]
全体の終了処理の出力を抑制する(-SF、-SF+)。または、抑制を解除する(-SF-)。
-Tstr
出力の項目区切りコードを指定する。正規表現で書く。デフォルトは 復帰改行 (\r\n)。
-V
式の値はそのまま出力するようにする。
式の値(文字列)を出力するときには、復帰(\r)を無視し、改行(\n)を復帰改行(\r\n)に変換しているが、これをやめてそのまま出力する。
-X
出力を項目数固定モードにする。一項目が一行に相当するようになる。このため、レコード区切りを復帰改行(\r\n)に変更する。

用例

参考

バージョン

Ver 1.022012/06/26 -L で入力行の扱いを変更できるようにした。
Ver 1.012012/04/30 初期化/終了化のcallback変更。 外部変数 ??print / ??kick / ??break / ??allbreak を導入
Ver 1.00初版