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

Jes*_*erE 4 ant pretty-print

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

<property name="prop" value="a,b,c"/>
Run Code Online (Sandbox Code Playgroud)

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

Line 1: a
Line 2: b
Line 3: c
Run Code Online (Sandbox Code Playgroud)

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

sud*_*ode 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>
Run Code Online (Sandbox Code Playgroud)

输出是:

test:
     [echo] a
     [echo] b
     [echo] c
Run Code Online (Sandbox Code Playgroud)


Ale*_*x K 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>
Run Code Online (Sandbox Code Playgroud)

输出为:

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>
Run Code Online (Sandbox Code Playgroud)

输出为:

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