2016-08-01 25 views
0

私はAnt ReplaceRegExpタスクを使用して10,000以上のファイルのテキストを置き換えています。各ファイルには、実行する必要のある複数の検索/置換パターンがあります。今のところ、複数のブロックを持ち、それぞれが "**/*。java"のFileSetを持っています。Ant ReplaceRegExpタスク - ファイルごとに複数の置換がありますか?

私の検索/置換対象のリストが大きくなるにつれて、10kファイルでReplaceRegExp#1、次に10kファイルでReplaceRegExp2などを実行するので、これは永遠に実行されます。すでに約15個のReplaceRegExpブロックがあるので、私のタスクはすでに約45分かかります。

各ファイルが一度だけ処理/アクセスされるようにする方法はありますか?15回以上個別に処理するファイルではなく、ファイルの正規表現検索/置換を15回以上実行しますか?論理的に、このようなものです何かを探して本質的には

、:

<replaceregexp 
     match="firstmatch" 
     replace="firstraplce" 

     match="secondmatch" 
     replace="secondreplace" 

     etc.. 

     byline="true"> 
     <fileset dir="."> 
      <include name="**/*.java"/> 
     </fileset> 
    </replaceregexp> 

明らかに無効なXMLですが、私が探しているものを概念的に示しています。今、私は2つのグループを使います - 一つは "firstmatch/firstreplace"、もう一つは "secondmatch/secondreplace"です。

ありがとうございました。

答えて

0

TokenFilterFilterChain and FilterReaderから使用すると、トークナイザ(あなたのケースではライントークナイザ)と順番に適用されるフィルタセットを定義できます。それはn回ReplaceRegExpタスクを呼び出すよりも優れた性能を持っている場合は知りませんが、あなたは試してみてください:

<filterchain> 
    <tokenfilter> 
     <replaceregex pattern="match_1" replace="replace_1"/> 
     <replaceregex pattern="match_2" replace="replace_2"/> 
     ... 
     <replaceregex pattern="match_n" replace="replace_n"/> 
    </tokenfilter> 
</filterchain> 
+0

:** tokenfilterはサポートしていません。ネストされた "replaceregexp"要素** – Heinz

+0

@Heinzこのエラーを指摘してくれてありがとう、それはタイプミスでした...私はこの例を修正しました。 –

0

次作品:これはエラーを返します

<filterchain> 
    <tokenfilter> 
     <replacestring from="oldstr1" to="newstr1"/> 
     <replacestring from="oldstr2" to="newstr2"/> 
    </tokenfilter> 
</filterchain> 
関連する問題