2016-08-01 6 views
0

Я использую задачу Ant ReplaceRegExp, чтобы заменить текст более чем на 10 000 файлов. Каждый файл имеет несколько шаблонов поиска/замены, которые мне нужно выполнить. На данный момент есть несколько блоков, каждый с файловым набором «**/*. Java».Задача Ant ReplaceRegExp - несколько подстановок на файл?

Поскольку мой список вещей для поиска/замены растет, это выполняется навсегда, поскольку он будет выполнять ReplaceRegExp # 1 на 10k-файлах, а затем ReplaceRegExp2 на 10k-файлах и т. Д. У меня уже около 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, но показывает, что концептуально я ищу. Теперь я использую две группы - одну для «firstmatch/firstreplace» и одну для «secondmatch/secondreplace» в том же наборе файлов.

Спасибо.

ответ

0

Вы можете использовать TokenFilter от FilterChain and FilterReader, это позволяет определить токенизатор (токенизатор линии в вашем случае) и набор фильтров, который будет применяться последовательно. Не знаю, если он имеет более высокую производительность, чем вызов п раз 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> 
Смежные вопросы