2009-09-25 72 views
4

給定一個ant文件集,我需要對它執行一些sed-like操作,將它壓縮爲多行字符串(每個文件有效一行),並將結果輸出到文本文件。螞蟻中的文本操作

我在找什麼螞蟻任務?

回答

1

看起來你需要的任務conbination:

這條以「\ r」和文件的「\ n」字符並將其加載到propertie:

<loadfile srcfile="${src.file}" property="${src.file.contents}"> 
    <filterchain> 
    <filterreader classname="org.apache.tools.ant.filters.StripLineBreaks"/> 
    </filterchain> 
</loadfile> 

加載後文件將它們連接到另一個問題:

<concat destfile="final.txt"> 
    ... 
</concat> 

CONCAT使用屬性集引用文件內容:

<propertyset id="properties-starting-with-bar"> 
    <propertyref prefix="src.file"/> 
</propertyset> 
+0

這是非常好的......我認爲你沒有把問題的所有細節都弄清楚,但是如果我願意的話,這足以表明我足以制定一個完整的解決方案。 我不操縱文件的內容。我有一個用標籤構建的文件列表;我想將一個Ant 應用到列表中(基本上剝離一些目錄和其他轉換),然後將整個內容吐出到一個文件中,每行一個。 – skiphoppy 2009-09-25 15:32:26

+0

因此,考慮到您與我分享的內容,我可以將回顯爲一個文件,然後將其重新載入,然後寫回到文件。那將是純粹的螞蟻。雖然我討厭製作一個額外的臨時文件。 – skiphoppy 2009-09-25 15:33:21

+0

好的,我知道了。是不是有一個額外的文件不好;) – rodrigoap 2009-09-25 15:59:04

3

嘗試使用ReplaceRegExp可選任務。

ReplaceRegExp是用於在選定的文件用的取代樣式更換定正則表達式的發生或文件集的基於目錄的任務。

在頁面底部附近有幾個例子可以幫助您入門。

0

rodrigoap的答案是足以建立一個純螞蟻的解決方案,但它不是對我來說不夠乾淨,將一些非常複雜的螞蟻的代碼,所以我用不同的方法:我的子類螞蟻的回聲任務使echofileset任務,這需要文件集映射器。子類echo讓我有能力輸出到文件。 A regexmapper對我需要的文件名執行轉換。我硬編碼它打印出單獨的每一個文件,但如果我需要更多的靈活性,我可以添加一個可選的分隔符屬性。我也考慮過提供輸出到一個屬性的能力,但事實證明,我不需要它,因爲我直接回復到一個文件。

5

Ant script任務允許您以腳本語言實現任務。如果你安裝了JDK 1.6,Ant可以執行JavaScript而不需要任何附加的依賴庫。 JavaScript代碼可以讀取文件集,轉換文件名並將它們寫入文件。

<fileset id="jars" dir="${lib.dir}"> 
    <include name="*.jar"/> 
    </fileset> 

    <target name="init"> 
    <script language="javascript"><![CDATA[ 
     var out = new java.io.PrintWriter(new java.io.FileWriter('jars.txt')); 

     var iJar = project.getReference('jars').iterator(); 
     while (iJar.hasNext()) { 
      var jar = new String(iJar.next()); 
      out.println(jar); 
     } 

     out.close(); 
    ]]></script> 
    </target> 
+0

吉姆,太棒了!在開始繼承ant任務之前沒有看到。我曾經看到Groovy類似的東西,但不希望將Groovy整合到我們的項目中。 – skiphoppy 2009-09-25 20:20:56