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 = "[EMAIL PROTECTED]" arg2 = "@{upper}"/>
</not>
<then>
<loop/>
<math result = "@{param}" datatype = "int"
operation = "+" operand1 = "[EMAIL PROTECTED]" operand2 = "@{step}"/>
<jp-for param = "@{param}" lower = "[EMAIL PROTECTED]"
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:[EMAIL PROTECTED]
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
[EMAIL PROTECTED] wrote:
ant-contrib.sourceforge.net has some tasks to do this.
-----Original Message-----
From: "Guru Balse" <[EMAIL PROTECTED]>
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: [EMAIL PROTECTED] For
additional
commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED] For
additional
commands, e-mail: [EMAIL PROTECTED]
--
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: [EMAIL PROTECTED] For
additional commands, e-mail: [EMAIL PROTECTED]
--
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