您好我有一个包含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发出错误说明列表期待开放引号。感谢帮助。
答案 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}
附近的引号。