2016-03-30 3 views
1

J'ai juste besoin de savoir comment modifier le code ci-dessous afin que fourmi détermine le nombre de lignes dans mes fichiers texte (Veuillez noter que tous les fichiers texte auront le même nombre de lignes mais ce nombre n'est pas corrigé) et les exécute automatiquement en fonction de la boucle.Nombre de ressources dans les scripts 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>

Ici comme vous voyez la liste = « 0,1,2 » signifie la boucle vérifiera trois premières lignes de chaque fichier texte, mais je veux que ce soit dynamique en fonction du nombre des lignes les fichiers ont. Toute aide ici serait grandement appréciée.

Merci, Ashley

+0

Avez-vous envisagé l'intégration sonarqube dans votre construction? Le nombre de codes source est l'un des indicateurs collectés et transmis à un tableau de bord d'application Web. –

Répondre

1

La solution ci-dessous fonctionne ici: -

<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>