2016-03-30 101 views
1

我只需要知道如何修改下面的代码,以便ant确定我的文本文件中的行数(请注意这里的所有文本文件将具有相同的行数,但该数量不是固定的)并根据循环自动执行它们。蚂蚁脚本中的资源计数

<project name="ant-read-n-files" default="run" basedir="."> 
 
    
 
    <!-- Load the ant contrib lib --> 
 
    <taskdef resource="net/sf/antcontrib/antlib.xml"> 
 
    <classpath> 
 
     <pathelement location="${basedir}/lib/ant-contrib.jar"/> 
 
    </classpath> 
 
    </taskdef> 
 
    
 
    <target name="read"> 
 
    <!-- file a --> 
 
    <loadfile property="textFileA" srcfile="${basedir}/files/aaa.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileA}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileAValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    <!-- file b --> 
 
    <loadfile property="textFileB" srcfile="${basedir}/files/bbb.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileB}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileBValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    <!-- file c --> 
 
    <loadfile property="textFileC" srcfile="${basedir}/files/ccc.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileC}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileCValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    
 
    <!-- Print them all --> 
 
    <echo message="${textFileAValue}"/> 
 
    <echo message="${textFileBValue}"/> 
 
    <echo message="${textFileCValue}"/> 
 
    </target> 
 
    
 
    <target name="run"> 
 
    <foreach param="linenum" list="0,1,2" target="read"/> 
 
    </target> 
 
</project>

这里,你看到列表=“0,1,2”是指循环将验证前三行的每个文本文件,但我想这取决于这个数字是动态文件的行数。 任何帮助在这里将不胜感激。

感谢, 阿什利

+0

你有没有考虑整合SonarQube到您的构建?源代码计数是收集并报告给Web应用程序仪表板的度量标准之一。 –

回答

1

下面的解决方案在这里工作: -

<project name="ant-read-n-files" default="run" basedir="."> 
 
    
 
    <!-- Load the ant contrib lib --> 
 
    <taskdef resource="net/sf/antcontrib/antlib.xml"> 
 
    <classpath> 
 
     <pathelement location="${basedir}/lib/ant-contrib.jar"/> 
 
    </classpath> 
 
    </taskdef> 
 
    
 
    <target name="read"> 
 
    <!-- file a --> 
 
    <loadfile property="textFileA" srcfile="${basedir}/files/aaa.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileA}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileAValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    <!-- file b --> 
 
    <loadfile property="textFileB" srcfile="${basedir}/files/bbb.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileB}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileBValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    <!-- file c --> 
 
    <loadfile property="textFileC" srcfile="${basedir}/files/ccc.txt"> 
 
     <filterchain> 
 
     <headfilter lines="1" skip="${linenum}"/> 
 
     </filterchain> 
 
    </loadfile> 
 
    <for param="line" list="${textFileC}" delimiter="${line.separator}"> 
 
     <sequential> 
 
     <property name="textFileCValue" value="@{line}"/> 
 
     </sequential> 
 
    </for> 
 
    
 
    <!-- Print them all --> 
 
    <echo message="${textFileAValue}"/> 
 
    <echo message="${textFileBValue}"/> 
 
    <echo message="${textFileCValue}"/> 
 
    </target> 
 
    
 
    <target name="run"> 
 
    <!-- Get number of lines of one of the files --> 
 
    <loadfile property="textFile" srcfile="${basedir}/files/aaa.txt"/> 
 
    <resourcecount property="line.count" count="0" when="eq"> 
 
     <tokens> 
 
     <concat> 
 
      <filterchain> 
 
      <tokenfilter> 
 
       <stringtokenizer delims="${line.separator}" /> 
 
      </tokenfilter> 
 
      </filterchain> 
 
      <propertyresource name="textFile" /> 
 
     </concat> 
 
     </tokens> 
 
    </resourcecount> 
 
    <echo message="Number of lines: ${line.count}" /> 
 
    
 
    <script language="javascript"> 
 
     var list="", n=parseInt(project.getProperty("line.count"), 0); 
 
     for (var i = 0; i &lt; n; i++) list += i + ","; 
 
     project.setProperty("list", list); 
 
    </script> 
 
    <foreach param="linenum" list="${list}" target="read"/> 
 
    
 
    </target> 
 
</project>