EXPRARG 入力行をパラメータ展開してTSEXPRで計算

書法

EXPRARG expr [filename]* [option]*

SHELLMODE

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

詳細

第一パラメータをTSEXPR式の連続として解釈して、 入力ファイルの各行に対して計算し、標準出力する。ファイル名を省略すると標準入力を扱う。
デフォルトでは、入力行をコマンドラインと同様のパラメータ展開を行って入力項目とする。
通常は間接展開を禁止しているので、空白区切りの項目取り出しとなる。「""」「''」の取り扱いは、コマンドラインと同じ。

EXPRARG.EXE は要素から構成された行を取り扱う。この点は、タブで区切られた行を取り扱う EXPRTF.EXE と同様であるが、行の構成を色々と選べるので、より柔軟な取り扱いができる。その分だけオプション指定がやや面倒になっている。

 オプションを使用して入力行の解釈を変更すると、以下の形式を取り扱える。
パラメータ展開 行をコマンドラインパラメータと同様に展開する。デフォルト。
デフォルトではパラメータの間接展開がオフになっているので、半角スペース以下の(連続)コードを区切りとした、引用符、複引用符付きの項目解釈として扱える。
単純区切りコード-D 指定したコードを区切りコードとする。
空白区切り-K 行内の半角スペース以下のコードを区切りとする。連続した空白も一つの区切りとして扱う。
コンマ区切り形式-C コンマで区切ったファイル。コンマを含む項目は「"」「"」で囲む。引用符で囲まれた中にある引用符の重合解釈をオフに出来る。
正規表現セパレータ-R 区切りを正規表現で指定する。
正規検索表現項目-U 項目を正規検索表現で指定する。一致文字列が項目となる。
正規検索表現部分文字列-V 正規検索表現で一行をあらわし、その部分文字列が項目となる。行と一致しなければ部分文字列が空となるので、一致するように書かなければならない。

出力式記述

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

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

引数略記変数名説明
1 以上 @n 1から順に入力項目に対応
0 &0 ??gln 通算行番号
-1 &(-1) ??ln ファイル内行番号
-2 &(-2) ??fn ファイル番号
-3 &(-3) ??filename 処理中のファイル名
-4 &(-4) ??fc 現在行の項目数
-10 @(-10) ??line 現在行の全体
??print 出力の許可状態を表す論理値。 行の計算式、初期化式などそれぞれの場合に固有である。
??print := bool
この変数に論理値を代入することで出力の可否を制御できる。
bool SPOOL(str 文字列 ) 文字列を直接出力する。

動作モード

 オプション(-P)を指定すると、検定モードに出来る。

通常モード
入力行数と同じ行だけ常に出力する。
出力はTABファイルで、各項目には、先頭から順に式の値が対応する。
検定モード
検定モードでは、第一式が検定式となり、この式の値がTRUEになる行だけを出力する。 従って、第一式の型は論理型であること。
出力はTABファイルで、各項目には、第二式から順に式の値が対応する。

開始処理/終了処理

 全体の処理の開始/終了時、入力ファイル処理の開始/終了時に評価する式をオプション指定できる。 評価の結果を出力できる。また、出力するか否かをオプション指定できる。

名称式指定
オプション
出力指定
オプション
デフォルト
出力
説明
開始 -I -SI × 最初に評価。
終了 -F -SF 最後に評価
ファイル開始 -B -SB ファイルの開始時に評価
ファイル終了 -E -SE ファイルの終了時に評価

OPTION

-B{tsexpr;}+
ファイル処理の最初に実行して出力する式を書く。各式は「;」で区切る。
-C[S]
入力行の解釈を CSV 形式で行う。通常は引用符の重合解釈を行うが、-CSで重合解釈を取りやめる。
-D[str]
指定した区切りコードで入力行を区切って解釈する。正規表現で書く。区切りコードを省略すると TAB (\t)。
-E{tsexpr;}+
ファイル処理の最後に実行する式を書く。各式は「;」で区切る
-F{tsexpr;}+
全体の処理の最後に実行する式を書く。各式は「;」で区切る。
-I{tsexpr;}+
処理の最初に実行する式を書く。各式は「;」で区切る。デフォルトでは出力しない。
-J{S|C|L}
1行を入力する際のコードの扱いを指定する。
-JSデフォルト。不要のコードを除去。LFを行末とみなす。CRは無視する。
-JCコードの変更をしない。CRLFを行末として扱う。
-JLコードの変更をしない。LFを行末として扱う。
-K
入力行の解釈をスペース区切りに変更する。
-Lstr
出力の改行コードを指定する。正規表現で書く。デフォルトは CRLF (\r\n)。
-M[I|F|X]*
正規検索の際のオプションを指定する。
I半角英字の大文字小文字を区別しない
F半角全角英字の大文字小文字を区別しない
Xスペース無視モード
-NOEOL
出力の行末コードを抑制する。(行末でのTABの刈り込みも行わない)
-Ofilename
出力を指定のファイルに切替える。
-P
検定モードに切り替える
-Rregstr
セパレータを正規検索表現で指定する
-S[+|-]
各行の出力を抑制する(-S、-S+)。または、抑制を解除する(-S-)。
-SB[+|-]
ファイル開始処理の出力を抑制する(-SB、-SB+)。または、抑制を解除する(-SB-)。
-SE[+|-]
ファイル開始処理の出力を抑制する(-SE、-SE+)。または、抑制を解除する(-SE-)。
-SI[+|-]
全体の開始処理の出力を抑制する(-SI、-SI+)。または、抑制を解除する(-SI-)。
-SF[+|-]
全体の終了処理の出力を抑制する(-SF、-SF+)。または、抑制を解除する(-SF-)。
-SNON
パラメータの間接展開は行わない
-SALL
全てのモードの間接展開(!^@#)が有効。
-SNON
パラメータの間接展開は行わない
-SSTD
標準的な間接展開(!^@)が有効。
-S[!|^|@|#]*
個別に間接展開モードを指定する。何も書かなければ間接展開無し。
!!記述
^^記述
@@記述
##記述
-Tstr
出力の項目区切りコードを指定する。正規表現で書く。デフォルトは TAB (\t)。
-Uregstr
項目を正規検索表現で指定する。一致文字列が項目
-V
出力の際、項目をフィルタリングしない。
デフォルトでは、タブ(0x09)、行末(0x0a)以外の制御コードは無視し、行末は所定の改行コードに変換して出力する。
-Vregstr
項目を正規検索表現で指定する。各部分文字列が項目
-X
出力を項目数固定モードにする。行末でのTABの刈り込みは行わず、必ず改行する。
-Z
-Dで単純区切りコード指定モードで入力したとき、空行の項目数は0と解釈する。

用例

  1. 項目数を指定せずに、行形式変換
    exprarg "strconcix(??fc,tab,@(ix+1));"
    入力形式は自由に指定できる。すべての項目を TAB(0x09) で挟んで一行にしている。

参考

バージョン

Ver 1.022012/06/26 -M が指定できなかった不具合を修正
-J で入力行のコードの取り扱いを指定できるようにした。
Ver 1.012012/04/30 初期化/終了化のコールバック修正
外部変数 ??print を追加
Ver 1.00初版