Interesting question... I actually had a need to iterate over a list
(using for loop construct) but needed the previous, current and next
elements in the list - certainly similar functionality. Here is my
macro def:
<macrodef
name = "process-list"
description = "Allows one to iterate over a list/files and for
each element in the list know the previous, current and next values."
uri = "http://jplate.sourceforge.net/utility">
<attribute name = "list" default = "" description = "The
list to process."/>
<attribute name = "delimiter" default = "," description = "The
delimiter for @{list}."/>
<attribute name = "previous" default =
"jplate-utility.PREVIOUS" description = "Name of property to hold
previous value in list."/>
<attribute name = "current" default =
"jplate-utility.CURRENT" description = "Name of property to hold
current value in list."/>
<attribute name = "next" default =
"jplate-utility.NEXT" description = "Name of property to hold next
value in list."/>
<element name = "path" optional = "true" description =
"Files to process."/>
<element name = "process" description = "When iterating over
@{list}/@{path}, process the contents contained here."/>
<sequential>
<!--
Initial settings...
-->
<ant-contrib:var name = "@{previous}" value = ""/>
<ant-contrib:var name = "@{current}" value = ""/>
<ant-contrib:var name = "@{next}" value = ""/>
<!--
Iterate over files and/or the list, calling process
for each item. First iteration we skip as we want
to ensure we always have a previous, current and next.
-->
<ant-contrib:for list = "@{list}" delimiter =
"@{delimiter}" param = "processlist">
<ant-contrib:path>
<path/>
</ant-contrib:path>
<ant-contrib:sequential>
<ant-contrib:switch value = "[EMAIL PROTECTED]">
<ant-contrib:case value = "">
<ant-contrib:var name = "@{current}" value
= "@{processlist}"/>
</ant-contrib:case>
<ant-contrib:default>
<ant-contrib:var name = "@{next}" value =
"@{processlist}"/>
<process/>
<ant-contrib:var name = "@{previous}"
value = "[EMAIL PROTECTED]"/>
<ant-contrib:var name = "@{current}"
value = "@{processlist}"/>
</ant-contrib:default>
</ant-contrib:switch>
</ant-contrib:sequential>
</ant-contrib:for>
<!--
Need to call process with an empty next - meaning end of
list.
-->
<ant-contrib:var name = "@{next}" value = ""/>
<process/>
</sequential>
</macrodef>
broken connection wrote:
Hi Friends,
I have a simple "for" task question. I use this for task from
ant-contrib:
<for list="${pass1.property},${pass2.property},${pass3.property}"
param="argvalue">
<sequential>
<exec executable="${ext}" >
<arg value="/c"/>
<arg value="execute.bat @{argvalue}"/>
<redirector outputproperty="result.property" />
</exec>
</sequential>
</for>
I want to pass in 3 values and store the output in 3 different
properties .
Is there anyway to do this??
Rite now, the output of all the 3 parameters gets overritten in "
result.property"
Your help would be greatly appreciated.
Thanks
--
Scot P. Floess
27 Lake Royale
Louisburg, NC 27549
252-478-8087 (Home)
919-392-6730 (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]