蚂蚁中的文本操作

时间:2009-09-25 14:27:45

标签: ant

给定一个ant文件集,我需要对它执行一些类似sed的操作,将其压缩为多行字符串(每个文件实际有一行),并将结果输出到文本文件。

我在寻找什么蚂蚁任务?

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:3)

尝试ReplaceRegExp可选任务。

  

ReplaceRegExp是一个基于目录的任务,用于将所选正则表达式的出现替换为所选文件或一组文件中的替换模式。

页面底部附近有一些示例可帮助您入门。

答案 2 :(得分:1)

看起来你需要组合任务:

这会删除文件的'\ r'和'\ n'字符并将其加载到属性中:

<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 来引用文件内容:

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

答案 3 :(得分:0)

rodrigoap的回答足以构建一个纯粹的蚂蚁解决方案,但它对我来说不够干净并且会是一些非常复杂的蚂蚁代码,所以我使用了一种不同的方法:我将ant的 echo 任务子类化为制作 echofileset 任务,其中包含文件集映射器。子类化 echo 会让我获得输出到文件的能力。 regexmapper 对我需要的文件名执行转换。我将其硬编码为在单独的行上打印出每个文件,但如果我需要更多的灵活性,我可以添加一个可选的分隔符属性。我也想过提供输出到属性的能力,但事实证明我不需要它,因为我直接回复了文件。