ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Vimil Saju <>
Subject Re: Please Help Me Finish This For Loop Code
Date Fri, 02 Dec 2011 17:38:06 GMT
You can do something as follows

<propertyset id="arrayProperties1">
<propertyref regex="a\.b\.c\.[0-9]+x\.y"/>

<for list="${toString:arrayProperties1}" param="arrayProperty">
<!-- your processsing logic goes here -->

<propertyset id="arrayProperties2">
<propertyref regex="a\.b\.c\.[0-9]+p\.q"/>

<for list="${toString:arrayProperties2}" param="arrayProperty">
<!-- your processsing logic goes here -->

<propertyset id="arrayProperties3">
<propertyref regex="a\.b\.c\.[0-9]+s\.t"/>

<for list="${toString:arrayProperties3}" param="arrayProperty">
<!-- your processsing logic goes here -->

The 'for' task is from antcontrib.

 From: Steve Amerige <>
Sent: Friday, December 2, 2011 8:58 AM
Subject: Re: Please Help Me Finish This For Loop Code
Hi Matt, Scot, and all,

> Do you really need to iterate over numbers?  What practical concern
> are you trying to address?

Yes, I really do.  :-)

I'm iterating over "array" data where you have properties of the form:

     a.b.c.1.x.y, a.b.c.1.p.q, a.b.c.1.s.t
     a.b.c.2.x.y, a.b.c.2.p.q, a.b.c.2.s.t
     a.b.c.3.x.y, a.b.c.3.p.q, a.b.c.3.s.t
     a.b.c.N.x.y, a.b.c.N.p.q, a.b.c.N.s.t

And I'm doing various different kinds of processing depending on what the x.y, p.q, and s.t
property values are.  These properties 
come from a property file that are generated by some script and can contain potentially tens
of thousands of entries.

I don't have a choice as to using some other language.  Yes, this need is more suited to
Java, C, Groovy, etc.  But, as they say, it 
is what it is.  So, I'm looking for a solution.

So, I've nearly got a solution and am hoping to hear from anyone about how elements can be
set in the script portion below (whether 
JavaScript or Groovy).  Or if you can think of some other way to implement a for loop that
will not have problems no matter how many 
iterations are needed, I'd love to hear your ideas and give you kudos!

I'm hoping that some of the developers can share just how MacroInstance methods are supposed
to be used by completing the example 
below.  I'm sure the Ant community will be grateful!

Many thanks,
Steve Amerige
SAS Institute, Deployment Software Development

On 12/2/2011 11:43 AM, Matt Benson wrote:
> On Fri, Dec 2, 2011 at 10:34 AM, Scot P. Floess<>  wrote:
>> Oops, you said Ant contrib is fine ;)
>> Let me give this some thought - I may be able to help.  I thought I had some
>> code I wrote to do a "for" - I did and it used recursion...and just like you
>> mention, craps out around 300 iterations...  At one time I had figured out
>> how to do this...but have no idea where I put the code or if I even
>> implemented it....
>>   On Thu, 1 Dec 2011, Steve Amerige wrote:
>>> Hi all,
>>> I'm looking to implement a for loop in Ant (antcontrib, javascript/groovy
>>> scripts are okay).
>>> <target name="test-forloop">
>>> <forloop start="1" end="1000">
>>> <echo message="i = ${i}"/>
>>> </forloop>
>>> </target>
>>> <macrodef name="forloop">
>>> <attribute name="i"      default=""/>
>>> <attribute name="start"  default=""/>
>>> <attribute name="end"    default=""/>
>>> <attribute name="setup"  default="true"/>
>>> <element name="forbody"  implicit="true"/>
>>> <sequential>
>>> <if>
>>> <istrue value="@{setup}"/>
>>> <then>
>>> <script language="javascript">
>>> <![CDATA[
>>>               var start=@{start};
>>>               var end=@{end};
>>>               for (i = start; i<= end; i++) {
>>>                  macrotask = project.createTask("forloop");
>>>                  macrotask.setDynamicAttribute("i", i);
>>>                  macrotask.setDynamicAttribute("setup", "false");
>>>                  macrotask.perform();
>>>               }
>>>            ]]>
>>> </script>
>>> </then>
>>> <else>
>>> <echo message="forbody iteration # @{i}:"/>
>>> <!--<forbody/>  -->
>>> </else>
>>> </if>
>>> </sequential>
>>> </macrodef>
>>> I'm looking to implement a for loop in Ant that acts on an element.  Ant
>>> 1.7, Antcontrib, javascript/groovy scripts are okay.
>>> The above code works, but it doesn't call the<forbody/>.  I'm using
>>> JavaScript to implement the for loop, but I don't know how to add to the
>>> macrotask the passed-in element so that it gets called on each loop.  I've
>>> read pages on createDynamicElement (deprecated) and addTask in
>>> MacroInstance:
>>> But no examples are given to help me finish the above example.  Note that
>>> I did succeed in getting a version to work using recursion.  Unfortunately,
>>> it would only recurse 300 deep before aborting.  The above code doesn't have
>>> any problem with recursion.
>>> Can anyone help finish this code example so that<forbody/>  can be called?
>>> Thanks,
>>> Steve Amerige
>>> SAS Institute, Deployment Software Development
>> Scot P. Floess             RHCT  (Certificate Number 605010084735240)
>> Chief Architect FlossWare
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail:
>> For additional commands, e-mail:
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message