In perl we use <FileDescriptor> to read data line by ilne from a file. How to do the same using ant script.
            Asked
            
        
        
            Active
            
        
            Viewed 4.0k times
        
    13
            
            
        - 
                    Can you give more context? What are you trying to do? – martin clayton Mar 28 '11 at 09:17
- 
                    See: http://ant.apache.org/manual/Types/filterchain.html#headfilter – martin clayton Mar 28 '11 at 13:48
- 
                    thanks @martin with the help of filterchain and head filter i am able to read data from file. – rashok Mar 30 '11 at 18:55
4 Answers
29
            You can do that using the loadfile task in combination with the for task from ant-contrib (you will have to download and install ant-contrib).
<project name="test" default="compile">
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="path/to/ant-contrib.jar"/>
    </classpath>
  </taskdef>
  <loadfile property="file" srcfile="somefile.txt"/>
  <target name="compile">
    <for param="line" list="${file}" delimiter="${line.separator}">
      <sequential>
        <echo>@{line}</echo>
      </sequential>
    </for>
  </target>
</project>
 
    
    
        Lesmana
        
- 25,663
- 9
- 82
- 87
- 
                    I cant install `ant-contrib` in my application. Could you please tell me how to read only the first line of a file, without using `for` – rashok Mar 28 '11 at 13:49
- 
                    @rajaashok you can use [`headfilter`](http://ant.apache.org/manual/Types/filterchain.html#headfilter) inside `loadfile` – Lesmana Mar 28 '11 at 13:52
5
            
            
        Just had to do that myself, actually the for + line.separator solution is flawed because :
- it only works if the file EOLs match the platform EOL
- it discards empty lines
Here is another (better) solution based on the previous example :
<project name="test" default="compile">
  <taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
      <pathelement location="path/to/ant-contrib.jar"/>
    </classpath>
  </taskdef>
  <loadfile property="file" srcfile="somefile.txt"/>
  <target name="compile">
    <for param="line">
      <tokens>
        <file file="${file}"/>
      </tokens>
      <sequential>
        <echo>@{line}</echo>
      </sequential>
    </for>
  </target>
</project>
 
    
    
        mat007
        
- 905
- 8
- 16
- 
                    Would you mind explaining where thecome from? I cannot find it in the ant documentation. Is it used to split by line? – mgouin Feb 14 '19 at 03:54
- 
                    1It's a resource collection, see http://ant.apache.org/manual/Types/resources.html#tokens – mat007 Feb 15 '19 at 07:18
2
            
            
        The example using tokens did not work for me. In my scenario I was looking to simply print a README file while retaining the blank lines. Here is what I did.
<taskdef name="if-contrib" classname="net.sf.antcontrib.logic.IfTask" classpath="${basedir}/lib/ant/ant-contrib-1.0b3.jar" />
<taskdef name="for-contrib" classname="net.sf.antcontrib.logic.ForTask" classpath="${basedir}/lib/ant/ant-contrib-1.0b3.jar" />
<taskdef name="var-contrib" classname="net.sf.antcontrib.property.Variable" classpath="${basedir}/lib/ant/ant-contrib-1.0b3.jar" />
<target name="help">
    <for-contrib param="line">
        <tokens>
            <file file="README.txt" />
        </tokens>
        <sequential>
            <var-contrib name="line.length" unset="true" />
            <length string="@{line}" property="line.length" />
            <if-contrib>
                <equals arg1="${line.length}" arg2="0" />
                <then>
                    <echo>
                    </echo>
                </then>
                <else>
                    <echo>@{line}</echo>
                </else>
            </if-contrib>
        </sequential>
    </for-contrib>
</target>
 
    
    
        lokivog
        
- 21
- 1
-1
            
            
        Try This it should be work.....
<project name="test" default="compile">
 <loadfile property="file" srcfile="Help.txt"/>
   <target name="compile">
    <echo>${file}</echo> 
   </target>
</project>
 
    
    
        Alexis Pigeon
        
- 7,423
- 11
- 39
- 44
 
    
    
        Aniket Patil
        
- 87
- 1
- 3
 
    