在ant中漂亮地打印逗号分隔的字符串列表

4

我有一个逗号分隔的字符串在一个ant属性中,像这样:

<property name="prop" value="a,b,c"/>

我希望能像这样打印或记录它:

Line 1: a
Line 2: b
Line 3: c

听起来不应该太难,但我无法确定应该组合哪些蚂蚁组件。

2个回答

9
您可以使用 loadresource,将属性值指定为 字符串 资源来完成此操作。现在,您可以使用 replaceregex 过滤器将逗号转换为换行符。
<project default="test">

  <property name="prop" value="a,b,c"/>

  <target name="test">
    <loadresource property="prop.fmt">
      <string value="${prop}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="," replace="${line.separator}" flags="g"/>
        </tokenfilter>
      </filterchain>
    </loadresource>
    <echo message="${prop.fmt}"/>
  </target>

</project>

输出如下:
test:
     [echo] a
     [echo] b
     [echo] c

不错。在这种情况下,“for”解决方案似乎更合适,但这也可能很有用。 - JesperE

5

使用Ant-Contrib任务的示例

<taskdef resource="net/sf/antcontrib/antlib.xml"/>

<target name="test_split">
    <property name="prop" value="a,b,c"/>
    <for list="${prop}" param="letter">
        <sequential>
            <echo>@{letter}</echo>
        </sequential>
    </for>
</target>

输出结果如下:

a
b
c

以下是来自这里的另一个解决方案:
<scriptdef name="split" language="javascript">
    <attribute name="value"/>
    <attribute name="delimiter"/>
    <attribute name="prefix"/>
    <![CDATA[
         values = attributes.get("value").split(attributes.get("delimiter"));
         for(i=0; i<values.length; i++) {
             project.setNewProperty(attributes.get("prefix")+i, values[i]);
         }
     ]]>
</scriptdef>

<target name="test_split2">
    <property name="prop" value="a,b,c"/>
    <property name="prefix_str" value="Line_"/>
    <split value="${prop}" delimiter="," prefix="${prefix_str}"/>
    <echoproperties prefix="${prefix_str}"/>
</target>

输出结果如下:

Ant 属性
2011年11月22日星期二17:12:55
Line_0=a
Line_1=b
Line_2=c

此处为输出结果。

不错。我已经在使用ant-contrib,所以for解决方案是迄今为止最短和最容易阅读的。 - JesperE
我该如何全局使用@{letter}!或者我想在另一个目标中使用这个@{letter}...有什么办法吗? - Ashwin Hegde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接