目次へ

6.3. フィルタチェーン(FilterChain)

フィルタチェーンおよびフィルタリーダー(filterreader)はAnt1.5で追加された機能です。フィルタリーダーはフィルタ(filter)より高度なテキスト処理機能を持ったフィルタであり、フィルタチェーンはフィルタリーダを順番に連続で実行するための仕組みです。フィルタチェーンとフィルタリーダーの関係は、フィルタセットとフィルタの関係に似ていますが、フィルタセットではフィルタの順番が意味を持たないのに対し、フィルタチェーンでは、記述された順番でフィルタリーダーが実行されます(実行順序の違いによって結果が異なる場合があり得ます)。

属性
説明 初期値 必須
refid

事前定義したフィルタチェーンを参照します。

 

フィルタチェーンで利用できる属性は、idやrefid等のデータ構造共通のものだけです。フィルタチェーンは子要素として次節で説明するフィルタリーダを指定することができます。

6.4. フィルタリーダー(FilterReader)

フィルタリーダーはフィルタチェーンの子要素として用いる要素であり、様々なテキスト処理機能を提供します。フィルタリーダーはjava.io.FilterReaderを継承したクラスとして実現されています(そのため、ユーザ独自実装のフィルタを作成することも可能です)。

属性
説明 初期値 必須
classname

フィルタリーダーの実装クラスを指定します。

classpath

このフィルタリーダーの実行に必要なクラスパスを指定します。

classpathref
このフィルタリーダーの実行に必要なクラスパスを参照で指定します。    

フィルタリーダの動作を指定するために、フィルタリーダーにはパラメータを与えることができます。パラメータはparam子要素を用いて指定します。使用できるパラメータはそれぞれのフィルタリーダーにそよってさまざまです。パラメータの持つことができる属性は以下の通りです。

属性
説明 初期値 必須
name

パラメータの名前を指定する。

 
 
type
パラメータのタイプを指定する。
 
 
value
パラメータの値を指定する。    

Antでは、いくつかのフィルタリーダがあらかじめ用意されています。以下に、そのフィルタリーダの名前と実装クラスの一覧を示します。

名前
実装クラス
ClassConstants

org.apache.tools.ant.filters.ClassConstants

ExpandProperties
org.apache.tools.ant.filters.ExpandProperties
HeadFilter
org.apache.tools.ant.filters.HeadFilter
LineContains

org.apache.tools.ant.filters.LineContains

LineContainsRegExp
org.apache.tools.ant.filters.LineContainsRegExp
PrefixLines
org.apache.tools.ant.filters.PrefixLines
ReplaceTokens
org.apache.tools.ant.filters.ReplaceTokens
StripJavaComments
org.apache.tools.ant.filters.StripJavaComments
StripLineBreaks
org.apache.tools.ant.filters.StripLineBreaks
StripLineComments
org.apache.tools.ant.filters.StripLineComments
TabsToSpaces
org.apache.tools.ant.filters.TabToSpaces
TailFilter
org.apache.tools.ant.filters.TailFilter

これらの事前定義されたフィルタリーダは、もちろんフィルタリーダ要素においても利用できますが、省略記法として、それぞれの名前で定義された個別の要素として記述することができます。

<filterreader classname="org.apache.tools.ant.filters.HeadFilter">
  <param name="lines" value="30"/>
</filterreader>

このHeadFilterを利用したフィルタリーダは次のように記述することができます。

<headfilter lines="30" />

この規則は、上記の表に示したすべての事前定義フィルタリーダに適用されます。要素名はそれぞれ表の1列目に書いてあるフィルタ名を用います。これらの個別名を持った事前定義フィルタもフィルタチェーンの子要素として用いることができます。

以下は、この個別名を持ったフィルタについてそれぞれ説明します。

ExpandProperties

テキストファイル中のAntのプロパティ形式( ${....} )の文字列を、該当するプロパティの値に置き換えます。id等の共通属性以外で利用できる属性はありません。

HeadFilter

テキストファイルの先頭から指定した行数のテキストを切り出します。行数はlines属性で指定します。

属性
説明 初期値 必須
lines

取り出す行数を指定します。

10
 
LineContains

テキストファイルから、指定した文字列が含まれている行を抽出します。文字列の指定はContains子要素のvalue属性によって行います。Contains子要素は複数記述することができ、そのときは指定したすべての文字列が含まれる行のみが抽出されます。LineContainsでは共通属性以外の属性は利用できません。

LineContainsRegExp

LineContainsの文字列マッチ条件として正規表現を利用できるものです。条件の指定は、Regexp子要素のpattern属性により指定します。LineContainsRegExpでは共通属性以外の属性は利用できません。

次の例は、行の先頭が「Test」で始まる行のみを抽出します。

<LineContainsRegExp>
  <Regexp pattern="^Test" />
</LineContainsRegExp>
PrefixLines

テキストファイルの各行の先頭に文字列を挿入します。挿入する文字列はprefix属性により指定します。

属性
説明 初期値 必須
prefic

各行の先頭に追加する文字列を指定します。

 
ReplaceTokens

フィルタセットと同じようにトークンの置換を行います。置換対象とするトークンは、Token子要素により指定します。Token子要素では、key属性にトークン文字列(トークン区切り文字を除く)、value属性に置換後の文字列を指定します。

属性で指定するトークン区切り文字は1文字でなくてはいけません。2文字以上記述しても最初の1文字のみがトークン区切り文字であるとみなされます。

属性
説明 初期値 必須
begintoken

トークンの開始区切り文字を指定します。

@
 
endtoken
パラメータのタイプを指定する。
@
 
StripJavaComments

Javaソースファイルで用いられるタイプのコメントをすべて取り除きます(「/*潤オ*/」および「//潤オ」)。このフィルタでは共通属性以外の属性は利用できません。

StripLineBreaks

テキストファイルの改行文字を取り除きます。デフォルトで除去される改行文字は「\r」および「\n」です。もちろんこれらの組み合わせである「\r\n」(Windowsで用いられる改行コード)も除去されます。改行文字はlinebreaks属性で指定することもできます。linebreaksに複数文字の文字列を指定した場合、その文字列に含まれる各々の1文字がすべて改行文字とみなされます。2文字以上の組み合わせである文字列を改行文字として扱うことはできません(つまり、「\r\n」は除去するが「\r」は除去しない、ということはできません)。

属性
説明 初期値 必須
linebreaks

改行文字を指定します。

\r\n
 
StripLineComments

先頭が特定の文字列で始まっている行をコメント行とみなし、そのコメント行を取り除きます。コメントの表す文字列はComment子要素のvalue属性により指定します。コメント行とみなされるためには、指定した文字列が厳密に行頭に無ければいけません。先頭にタブやスペースが入っている場合はコメント行とみなされません。

次の例は、Unixのシェルスクリプト等で利用されているコメント形式である、先頭が「#」で始まる行を除去します。

<StripLineComments>
  <Comment value="#" />
</StripLineComments>
TabToSpaces

テキストファイル中のタブをスペースに置き換えます。一つのタブをいくつのスペースに置き換えるかは、tablength属性により指定します。

属性
説明 初期値 必須
tablength

タブと置き換えるスペースの長さを指定します。

8
 
TailFilter

テキストファイルの最後から指定した行数のテキストを切り出します。行数はlines属性で指定します。

属性
説明 初期値 必須
lines

取り出す行数を指定します。

10
 

(実習課題2)(Ant1.5以上)

実習課題1と同等の置換処理を行い、かつ置換を行った行のみを選択して出力するビルドファイルを作成して下さい。このとき、一つのフィルタチェインで全ての置換/選択処理を記述して下さい。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp
  • シナジーマーケティング研究開発グループブログ