2012-12-10 62 views
2

我正在使用ant來刪除文件中的行,如果該行與某個電子郵件地址列表匹配,並輸出一個沒有這些電子郵件地址的新文件,如下所示:使用ant修改包含另一個文件中的值的文件

<copy file="src/emaillist.tmp2" tofile="src/emaillist.txt"> 
    <filterchain> 
     <linecontains negate="true"><contains value="[email protected]"/>  
     </linecontains> 
     <linecontains negate="true"><contains value="[email protected]"/>   
     </linecontains> 
      ........ 

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

但我已經有包含我想刪除無效的電子郵件地址(invalidemail.txt)的列表中的文件,所以我想我的Ant文件,從這個文件中讀取無效的電子郵件地址的列表,而不是必須爲我不想要的每封電子郵件添加一個元素。無法解決如何做到這一點。

回答

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> 
+0

我還沒有真正嘗試這樣呢,但你的幫助看起來不錯,謝謝。 –

相關問題