質問

Hi I am having a csv file with 2 lines :

mf1,eg1,eg2,br1,br2

mf2,eg2,eg3,br2,br3

I want to store each comma separated value in separate variables using ant.

I am able to parse lines, but not individual values since list is not supporting nesting.

Below is my script :

<?xml version="1.0" encoding="UTF-8"?>

<project name="ForTest" default="getLine" basedir="."
    xmlns:ac="antlib:net.sf.antcontrib">
    <taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml"
        classpath="C:\Manju\apache-ant-1.8.4\ant-contrib-1.0b3-bin\ant-contrib\ant-contrib-1.0b3.jar" />
    <loadfile property="message" srcFile="build_params.csv" />
    <target name="getLine">
        <ac:for list="${message}" delimiter="${line.separator}" param="val">
            <sequential>
                <echo>@{val}</echo>
                <property name="var1" value=@{val}/>
            </sequential>
        </ac:for>
    </target>
    <target name="parseLine" depends="getLine">
        <for list=@{val} delimiter="," param="letter">
            <sequential>
                <echo>@{letter}</echo>
            </sequential>
        </for>
    </target>   



</project>

Target parseline is giving error saying for list is expecting open quotes. Help is appreciated.

役に立ちましたか?

解決

Have you considered embedding a scripting language like groovy instead? Far simpler compared to fighting ant-contrib.

<project name="demo" default="run">

  <target name="run">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy"/>
    <groovy>
      new File("build_params.csv").splitEachLine(",") { fields ->
        println "===================="
        println "field1: ${fields[0]}"
        println "field2: ${fields[1]}"
        println "field3: ${fields[2]}"
        println "field4: ${fields[3]}"
        println "field5: ${fields[4]}"
        println "===================="
      }
    </groovy>
  </target>

</project>

You can add a special bootstrap target to install the groovy jar automatically:

  <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/code
haus/groovy/groovy-all/2.2.1/groovy-all-2.2.1.jar"/>
  </target>

他のヒント

For one thing, your parseLine target should start like this:

<for list="@{val}" delimiter="," param="letter">

Note the quotes around @{val}.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top