ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Scot P. Floess" <flo...@mindspring.com>
Subject Re: Implementing a loop in ANT
Date Fri, 09 Jun 2006 17:37:44 GMT
Phew, I finally got a preliminary version working - took some time...

   <macrodef  name = "jp-for">
       <attribute  name = "param"  description = "The name of the param 
containing the current value of the loop"/>
       <attribute  name = "lower"  default = "1"  description = "The 
lower bounds of the loop"/>
       <attribute  name = "upper"  description = "The upper bounds of 
the loop"/>
       <attribute  name = "step"   default = "1"  description = "The 
upper bounds of the loop"/>

       <element  name = "loop"  implicit = "true" description = "The 
enclosing block - just like ant contrib's for/sequential"/>

       <sequential>
           <var  name = "@{param}"  value = "@{lower}"/>

           <if>
               <not>
                   <equals  arg1 = "${@{param}}"  arg2 = "@{upper}"/>
               </not>

               <then>
                   <loop/>

                   <math  result = "@{param}"  datatype = "int"  
operation = "+"  operand1 = "${@{param}}"  operand2 = "@{step}"/>

                   <jp-for  param = "@{param}"  lower = "${@{param}}"  
upper = "@{upper}"  step = "@{step}">
                       <loop/>
                   </jp-for>
               </then>
           </if>
       </sequential>
</macrodef>

It actually worked :)

Keep in mind...this is a preliminary version - not tried with a huge 
list - nor is it making sure upper/lower are actually the bigger/smaller 
number (nor whether they are integer values)...

But it mostly works :)

Anderson, Rob (Global Trade) wrote:
> I had a similar need. I bassically created a shell script that would
> generate a LIST property that contained a comma delimited list of
> numbers. Here is the script...
>
>
> #!/bin/bash
> echo "How many POs?"
> read NUM
>
> X=0
>
> echo -n "LIST=" >list.txt
>
> while  [ $X -lt $NUM ] ; do
>   if [ $X -lt 10 ] ; then
>     echo -n "$DELIM"00"$X" >> list.txt
>   elif [ $X -ge 10 ] & [ $X -lt 100 ] ; then
>     echo -n "$DELIM"0"$X" >> list.txt
>   else
>     echo -n "$DELIM""$X" >> list.txt
>   fi
>   DELIM=,
>   let X=$X+1
> Done
>
> Run this first to generate the LIST in list.txt, then use the foreach
> task to loop over the LIST property in your build.xml. I know it's kinda
> lame, but it works.
>
> -Rob A
>
>
>   
>> -----Original Message-----
>> From: Scot P. Floess [mailto:floess@mindspring.com] 
>> Sent: Friday, June 09, 2006 3:50 AM
>> To: Ant Users List
>> Subject: Re: Implementing a loop in ANT
>>
>> They do, but unfortunately not exactly what Guru needs.  They 
>> support for-loops over lists or file sets.  Really, he needs 
>> something like:
>>
>> <for lower = "1" upper = "100">
>> ...
>> </for>
>>
>> I'm trying to figure out a way to do this using 
>> ant/ant-contrib but its not readily apparent to me (I though 
>> it'd be trivial) to make it happen.
>>
>> What I really need is some form of while loop.  I considered 
>> using recursion...but I could see some possible issues with 
>> arbitrarily large iterations (not sure why one would do 
>> so...but nonetheless).
>>
>> Anyway, really I don't think he wants to pre-compute some 
>> large list with a delimiter and then use <for> over the 
>> list...  At least I don't want to do that as a solution ;)  
>> Yes, I know one could possibly use a <script>.  I am trying 
>> to not do that anyway (for reasons related to my open source 
>> project - long story)...
>>
>> Scot
>>
>> dbrosius@baybroadband.net wrote:
>>     
>>> ant-contrib.sourceforge.net has some tasks to do this.
>>>
>>>
>>>
>>>
>>> -----Original Message-----
>>> From: "Guru Balse" <guru.balse@oracle.com>
>>> Sent: Wed, June 7, 2006 2:17 pm
>>> To: "Ant Users List" <user@ant.apache.org>
>>> Subject: Implementing a loop in ANT
>>>
>>> I am sure this question has been asked before, and I could 
>>>       
>> not see any 
>>     
>>> reasonable answer in the archives.  How can I implement a 
>>>       
>> loop in ANT 
>>     
>>> without using scripts?  For example, if I want to call a certain 
>>> target N times, how can I do it?
>>>
>>> Using ant-contrib is OK.  Of course, something like <for 
>>> list="1,2,3,4,5,6,...,N"> would work but I want N to be a property 
>>> that can be specified in the command line.
>>>
>>> Thanks in advance for your suggestions.
>>>
>>>  - Guru Balse
>>>
>>>
>>>       
>> ---------------------------------------------------------------------
>>     
>>> 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
>>>
>>>
>>>   
>>>       
>> --
>> Scot P. Floess
>> 27 Lake Royale
>> Louisburg, NC  27549
>>
>> 252-478-8087 (Home)
>> 919-754-4592 (Work)
>>
>> Chief Architect JPlate  http://sourceforge.net/projects/jplate
>> Chief Architect JavaPIM http://sourceforge.net/projects/javapim
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@ant.apache.org For 
>> additional commands, e-mail: user-help@ant.apache.org
>>
>>
>>
>>     
>
>
>   

-- 
Scot P. Floess
27 Lake Royale
Louisburg, NC  27549

252-478-8087 (Home)
919-754-4592 (Work)

Chief Architect JPlate  http://sourceforge.net/projects/jplate
Chief Architect JavaPIM http://sourceforge.net/projects/javapim


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message