2013-08-13 4 views
0

Я пытаюсь прочитать имена набора файлов в каталоге и применить регулярное выражение к этим именам и получить список с разделенными запятыми значениями. Имена файлов находятся в формате build_level1_D1.properties, build_level1.D2.properties, build_level2.D1.properties и т. Д. Мне нужно прочитать все имена файлов и применить регулярное выражение и проанализировать имена, чтобы получить level1_D1, level1_D2 , level2_D1 и т. д. Мне это нужно в формате property name = "build.levels" value = "level1_D1, level1_D2, level2_D1" Это то, что я пытался. Нужны некоторые указатели и помощь.Ant читает файлы в каталоге и regex

<target name="build-levels-all"> 
      <for param="program"> 
       <path><fileset dir="${root.build.path}/build" includes="*"/> 
       </path> 
       <sequential> 
        <propertyregex override="yes" property="file" input="@{program}" regexp="build\_([^\.]*)" select="\1" /> 
        <echo>${file}</echo> 
       </sequential> 
      </for> 
      <echo>${program}</echo> 
<-- This prints the files regexed Level1_D1, level2_D2 etc....But i need to capture it in the format of <property name="build.levels" value="level1_D1,level1_D2,level2_D1" /> --> 
      </target> 

ответ

1

Попробуйте использовать встроенный язык сценариев, как groovy, чтобы сделать этот вид сложной логики.

<target name="process-files"> 
     <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/> 

     <groovy> 
     def list = [] 

     new File('build').eachFile() { 
      def matcher = it.name =~ /(build_level\d_D\d).properties/ 
      list.add matcher[0][1] 
     } 

     properties."build.levels" = list.join(",") 
     </groovy> 
    </target> 

    <target name="doSomething" depends="process-files"> 
     <echo>${build.levels}</echo> 
    </target> 

Как и муравейник, groovy нуждается в дополнительной банке. Обычно я устанавливаю цель «bootstrap»:

<target name="bootstrap"> 
     <mkdir dir="${user.home}/.ant/lib"/> 
     <get dest="${user.home}/.ant/lib/groovy-all.jar" src="http://search.maven.org/remotecontent?filepath=org/codehaus/groovy/groovy-all/2.1.6/groovy-all-2.1.6.jar"/> 
    </target>