Ant カスタム FilterChain サンプル
で使うフィルターのサンプルです。
現在、ソースコードのみの提供とします。
まだ十分なテストをしていないで問題があるかもしれません。
何かあれば教えていただければ幸いです。
StripTag
テキスト中のHTMLタグ部分のみ出力しません。非常にシンプルなコードです。きちんとするには、XMLParserを使うやり方を検討してください。
■ダウンロード(ソースコード)■ダウンロード(テストコード)
使用例
<target name="striphtml"> <property name="htmlfile" value="test.html"/> <property name="newfile" value="new.txt"/> <copy file="${htmlfile}" tofile="${newfile}"> <filterchain > <filterreader classpath="bin" classname="org.jpn.xucker.ant.filter.StripTag"/> </filterchain> </copy> </target>
LineNotContains(文字列を含まない行のみコピー)
LineContainsを一部修正したものです。
こちらは指定した文字列のいずれも含まないものを通します。
私はアクセスログの解析時、gifやpngなどを外しています。他にスマートなやり方がありそうな気がしたのですが思いあたりませんでした。
使用例
<target name="logclean"> <typedef name="linenotcontains" classpath="bin" classname="org.jpn.xucker.ant.filter.LineNotContains"/> <copy file="access_log" tofile="clean_log"> <filterchain> <filterreader classpath="bin" classname="org.jpn.xucker.ant.filter.LineNotContains"> <param type="notcontains" value=".gif HTTP"/> <param type="notcontains" value=".png HTTP"/> <param type="notcontains" value=".jpg HTTP"/> <param type="notcontains" value=".css HTTP"/> <param type="notcontains" value="._vti_bin"/> <param type="notcontains" value=".ico HTTP"/> <param type="notcontains" value="/MSOffice/"/> <param type="notcontains" value="XXXXX:+++"/> </filterreader> </filterchain> </copy> </target>
LineWhicheverContains(いずれかの文字列を含む行のみコピー)
LineContainsはparamすべて含まなければならないが、こちらはいずれか
LineWhicheverNotContains(いずれかの文字列を含まない行のみコピー)
LineNotContainsはparam すべて含んでいない行だけど、こちらはいずれかの文字列が含んでいなければいい。
つまりすべて含んでいる行はのみコピーしない。
BeforeLineContains(含む行が見つかる前までの行をコピー)
アクセスログを分割するのみどうでしょうか。
AfterLineContains(含む行が見つかった以後の行をコピー)
アクセスログを分割するのにどうでしょうか。