如果该行与任何电子邮件地址列表匹配,我目前正在使用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文件从这个文件中读取无效电子邮件地址列表,而不是必须添加我不想要的每封电子邮件的元素。无法解决如何做到这一点。
答案 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>