漂亮的打印以逗号分隔的蚂蚁字符串列表

时间:2011-11-22 10:43:04

标签: ant pretty-print

我在ant属性中有一个以逗号分隔的字符串,如下所示:

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

我希望能够像这样打印或登录:

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

听起来不应该太难,但我无法弄清楚我应该把哪些蚂蚁组成。

2 个答案:

答案 0 :(得分:9)

您可以使用loadresource将属性值指定为string资源来执行此操作。现在,您可以使用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

答案 1 :(得分:4)

使用Ant-Contrib Tasks

的示例
<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

here的另一个解决方案:

<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 =一个
  LINE_1 = B
  LINE_2 = C