2016-08-01 5 views
0

Ich verwende die Ant ReplaceRegExp Aufgabe, um Text in über 10.000 Dateien zu ersetzen. Jede Datei hat mehrere Such-/Ersetzungsmuster, die ich ausführen muss. Ab sofort haben Sie mehrere Blöcke mit jeweils einem FileSet von "**/*. Java".Ant ReplaceRegExp-Task - mehrere Ersetzungen pro Datei?

Wenn meine Liste der zu suchenden/zu ersetzenden Objekte wächst, dauert es ewig, bis sie ausgeführt wird, da ReplaceRegExp # 1 für 10k-Dateien, ReplaceRegExp2 für 10k-Dateien und so weiter ausgeführt werden. Ich habe bereits etwa 15 ReplaceRegExp Blöcke, so dass meine Aufgabe bereits etwa 45 Minuten dauert.

Gibt es eine Möglichkeit, es zu bekommen, so dass jede Datei nur einmal verarbeitet/abgerufen wird, und es führt alle 15+ meiner Regex Suche/ersetzt auf der Datei anstatt die Datei muss 15 + individuelle Zeiten verarbeitet werden?

Im Wesentlichen der Suche nach etwas, das ist logisch wie folgt aus:

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

     match="secondmatch" 
     replace="secondreplace" 

     etc.. 

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

die offensichtlich ungültige XML ist, aber zeigt konzeptionell, was ich suche. Jetzt benutze ich 2 Gruppen - eine für "firstmatch/firserreplace" und eine für "secondmatch/secondreplace" auf derselben Dateigruppe.

Danke.

Antwort

0

Sie können TokenFilter von FilterChain and FilterReader verwenden, ermöglicht es, einen Tokenizer (einen Zeilen-Tokenizer in Ihrem Fall) und einen Satz von Filtern zu definieren, die nacheinander angewendet werden. Weiß nicht, ob es eine bessere Leistung als n-mal ReplaceRegExp Aufgabe Aufruf hat, aber Sie sollten versuchen:

<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

dies einen Fehler zurückgibt: ** tokenfilter nicht unterstützt das geschachtelte "replace_rexp" -Element ** – Heinz

+0

@Heinz Danke, dass du auf diesen Fehler hingewiesen hast, es war ein Tippfehler ... Ich habe das Beispiel korrigiert und es funktioniert jetzt ... –

0

Die folgenden Werke:

<filterchain> 
    <tokenfilter> 
     <replacestring from="oldstr1" to="newstr1"/> 
     <replacestring from="oldstr2" to="newstr2"/> 
    </tokenfilter> 
</filterchain> 
Verwandte Themen