我在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)
听起来不应该太难,但我无法弄清楚我应该把哪些蚂蚁组成.
您可以使用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)
使用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
| 归档时间: |
|
| 查看次数: |
5543 次 |
| 最近记录: |