Propertyregex读取CSV行并为变量分配字段

时间:2015-12-17 05:01:42

标签: ant ant-contrib

我有一个带有以下条目的csv / txt文件

abc,123
xyz,678
ijk,921

我试图通过for循环读取文件并将第一个元素分配给var1,第二个元素分配给var2

var1=abc
var2=123

我需要使用这些变量来执行某些任务并返回循环以读取文件的下一行并分配新值。

以下是我所拥有的,而且我无法分配变量

<loadfile property="message" srcFile="test.txt" />

<target name="compile">
  <for param="line" list="${message}" delimiter="${line.separator}">
    <sequential>
      <echo>@{line}</echo>
      <propertyregex property="var1"
                     input="@line"
                     regexp="/^(.+?),(.+)/"
                     select="\1" />
      <echo message="${var1}" />
    </sequential>
  </for>
</target>

下面是我得到的输出,显示没有赋值给var1。

     [echo] abc,123
     [echo] ${var1}
     [echo] xyz,678
     [echo] ${var1}
     [echo] ijk,921
     [echo] ${var1}

1 个答案:

答案 0 :(得分:0)

你有几个错误,下面的循环体适合我,最后看输出。

第一个问题是for loop中的@{line}参数替换语法使用了antcontrib macrodef,并且{} brakets不是可选的 - 你错过了它们 1}}属性,而input=""任务中包含了它们。

第二个问题是您无需在echo属性中指定封闭斜杠/../

rexexp=

输出:

<echo>@{line}</echo>
<propertyregex property="var1"
                    override="yes"
                    input="@{line}"
                    regexp="^(.+?),(.+)"
                    select="\1"/>
<propertyregex property="var2"
                    override="yes"
                    input="@{line}"
                    regexp="^(.+?),(.+)"
                    select="\2"/>
<echo message="${var1},${var2}" />