In perl we use <FileDescriptor>
to read data line by ilne from a file. How to do the same using ant script.
How to read data line by line from a file using ant script?
Asked Answered
Can you give more context? What are you trying to do? –
Overuse
See: ant.apache.org/manual/Types/filterchain.html#headfilter –
Overuse
thanks @martin with the help of filterchain and head filter i am able to read data from file. –
Jelsma
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>
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
–
Jelsma @rajaashok you can use
headfilter
inside loadfile
–
Housemaster 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>
Would you mind explaining where the <tokens> come from? I cannot find it in the ant documentation. Is it used to split by line? –
Gherkin
It's a resource collection, see ant.apache.org/manual/Types/resources.html#tokens –
Fascine
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>
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>
This does not answer the question –
Canna
© 2022 - 2024 — McMap. All rights reserved.