Ant脚本+解析csv文件

时间:2013-12-08 21:02:02

标签: ant ant-contrib

您好我有一个包含2行的csv文件:

MF1,EG1,EG2,BR1,BR2

MF2,EG2,EG3,BR2,BR3

我想使用ant将每个逗号分隔值存储在单独的变量中。

我能够解析行,但不能解析单个值,因为列表不支持嵌套。

以下是我的剧本:

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

目标parseline发出错误说明列表期待开放引号。感谢帮助。

2 个答案:

答案 0 :(得分:1)

您是否考虑过嵌入像groovy这样的脚本语言?与打击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>

您可以添加一个特殊的引导目标来自动安装groovy jar:

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

答案 1 :(得分:0)

首先,您的parseLine目标应该像这样开始:

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

请注意@{val}附近的引号。