使用ant修改包含另一个文件中的值的文件

时间:2012-12-10 13:54:52

标签: ant

如果该行与任何电子邮件地址列表匹配,我目前正在使用ant删除文件中的行,并输出没有这些电子邮件地址的新文件,如下所示:

<copy file="src/emaillist.tmp2" tofile="src/emaillist.txt">
   <filterchain>
       <linecontains negate="true"><contains value="paultaylor@hotmail.com"/>     
       </linecontains>
       <linecontains negate="true"><contains value="paultaylor2@hotmail.com"/>           
       </linecontains>
            ........

            ........
   </filterchain>
</copy>

但是我已经有一个文件包含我要删除的无效电子邮件地址列表(invalidemail.txt),所以我希望我的ant文件从这个文件中读取无效电子邮件地址列表,而不是必须添加我不想要的每封电子邮件的元素。无法解决如何做到这一点。

1 个答案:

答案 0 :(得分:1)

Ant有一些有用的资源列表处理任务。这是一个“原型”解决方案。

默认情况下,在换行符中将输入和排除列表加载到两个资源集合tokenized

<tokens id="input.list">
    <file file="src/emaillist.tmp2"/>
</tokens>
<tokens id="invalid.list">
    <file file="invalidemail.txt"/>
</tokens>

执行一些set arithmetic来生成干净电子邮件的资源列表:

<intersect id="to_be_removed.list">
    <resources refid="input.list"/>
    <resources refid="invalid.list"/>
</intersect>

<difference id="clean.list">
    <resources refid="input.list"/>
    <resources refid="to_be_removed.list"/>
</difference>

以下是一些可能有用的诊断:

<echo message="The input list is: ${ant.refid:input.list}" />
<echo message="Emails to be removed: ${ant.refid:to_be_removed.list}" />
<echo message="The clean list is: ${ant.refid:clean.list}" />

使用pathconvert task将清洁列表重新格式化为每行一个条目:

<pathconvert property="clean.prop" refid="clean.list"
             pathsep="${line.separator}" />

最后,输出到文件:

<echo file="src/emaillist.txt">${clean.prop}
</echo>