【问题标题】:Propertyregex to read a CSV line and assign fields to variablesPropertyregex 读取 CSV 行并将字段分配给变量
【发布时间】:2015-12-17 05:01:42
【问题描述】:

我有一个包含以下条目的 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}

【问题讨论】:

    标签: ant ant-contrib


    【解决方案1】:

    你有几个错误,下面的循环体对我有用,见最后的输出。

    第一个问题是for loop 中的@{line} 参数替换语法使用了一个antcontrib 宏定义,而{} 括号不是可选的——你在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}" />
    

    输出:

     [echo] abc,123
     [echo] abc,123
     [echo] xyz,678
     [echo] xyz,678
     [echo] ijk,921
     [echo] ijk,921
    

    【讨论】:

      猜你喜欢
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多