ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Benson <gudnabr...@gmail.com>
Subject Re: Please Help Me Finish This For Loop Code
Date Fri, 02 Dec 2011 17:41:26 GMT
On Fri, Dec 2, 2011 at 11:38 AM, Vimil Saju <vimilsaju@yahoo.com> wrote:
> You can do something as follows
>
> <propertyset id="arrayProperties1">
> <propertyref regex="a\.b\.c\.[0-9]+x\.y"/>
> </propertyset>
>
> <for list="${toString:arrayProperties1}" param="arrayProperty">
> <!-- your processsing logic goes here -->
> </for>
>
> <propertyset id="arrayProperties2">
> <propertyref regex="a\.b\.c\.[0-9]+p\.q"/>
> </propertyset>
>
> <for list="${toString:arrayProperties2}" param="arrayProperty">
> <!-- your processsing logic goes here -->
> </for>
>
> <propertyset id="arrayProperties3">
> <propertyref regex="a\.b\.c\.[0-9]+s\.t"/>
> </propertyset>
>
> <for list="${toString:arrayProperties3}" param="arrayProperty">
> <!-- your processsing logic goes here -->
> </for>
>
>
> The 'for' task is from antcontrib.
>

Actually, I really like this approach.  You actually don't even need
to specify these propertysets using list="${toString:...}"; it should
be perfectly feasible to specify these as nested elements in <for>.
Hats off to Vimil!  :)

Matt

>
> ________________________________
>  From: Steve Amerige <Steve.Amerige@sas.com>
> To: user@ant.apache.org
> 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<sfloess@nc.rr.com>  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:
>>>>
>>>>
>>>> http://javasourcecode.org/html/open-source/ant/ant-1.7.0/org/apache/tools/ant/taskdefs/MacroInstance.html
>>>>
>>>> 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  http://sourceforge.net/projects/flossware
>>>                            http://flossware.sourceforge.net
>>>                            https://github.com/organizations/FlossWare
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: user-help@ant.apache.org
>>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
>> For additional commands, e-mail: user-help@ant.apache.org
>>
>>
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@ant.apache.org
For additional commands, e-mail: user-help@ant.apache.org


Mime
View raw message