Ant命令比较字符串

时间:2015-06-12 05:29:30

标签: ant

我是Ant新手你可以帮助我满足以下需求吗?

尝试比较文件中的字符串并附加新字符串并保留现有字符串。说我的输入是

Project = vinoth,raghu,ram

我有一个名为ram.properties的文件。文件如下所示

这是了解Ant概念的文件 项目= Vinoth,raghu

通过比较输入和文件,项目值上只缺少ram。 我需要在文件的项目值中附加ram。我可以编写一个像下面这样的简单循环来查找但是如何附加值。 非常感谢您的帮助。

由于

1 个答案:

答案 0 :(得分:1)

在这里使用ant资源快速尝试,if/unless feature需要ant> = 1.9.3:

<project
  xmlns:if="ant:if"
  xmlns:unless="ant:unless"
>
<!-- Propertyfile containing the property to be compared against -->
<property file="ram.properties"/>

<!-- create macrodef for reuse -->
<macrodef name="stringcompare">
 <attribute name="property"/>
 <attribute name="string"/>
 <attribute name="update"/>

 <sequential>
  <resources id="property">
   <tokens>
    <stringtokenizer delims=", "/>
    <string value="${@{property}}"/>
   </tokens>
  </resources>

  <resources id="string">
   <tokens>
    <stringtokenizer delims=", "/>
    <string value="@{string}"/>
   </tokens>
  </resources>

  <difference id="diff">
   <resources refid="property"/>
   <resources refid="string"/>
  </difference>

  <echo> Diff ? => ${toString:diff}</echo>

  <replace file="@{update}" token="${@{property}}" value="${@{property}} ,${toString:diff}" unless:blank="${toString:diff}"/>

 </sequential>
</macrodef>

<stringcompare property="Project" string="vinoth, raghu, ram" update="ram.properties"/>

</project>

注意:macrodef属性属性使用propertyname(property="Project"),,而内部逻辑使用propertyvalue ${@{property}}

评论后

编辑

  

未设置必需的属性属性

表示你没有使用属性属性f.e调用macrodef。 :

<stringcompare string="vinoth, raghu, ram" update="ram.properties"/>

我已尝试使用ram.properties这样的片段:

  

Project = vinoth,raghu

输出:

[echo]  Diff ? => ram


ram.properties之后:

  

Project = vinoth,raghu,ram