【问题标题】:How to generate a comma separated list in Ant?如何在 Ant 中生成逗号分隔列表?
【发布时间】:2011-07-14 16:27:59
【问题描述】:

如何从 Ant 中的 for 循环中生成逗号分隔的列表?

我可以使用 ant-contrib for 循环遍历源属性,但我不确定如何输出到目标属性:

<ac:for list="${comma_seperated}" param="entry">
    <sequential>
         <if>
         <isset property="@{entry}_enabled" />
             <then>
             <!-- append to property enabled_list here -->
             </then>
         </if>
    </sequential>
</ac:for>

【问题讨论】:

    标签: ant for-loop csv ant-contrib


    【解决方案1】:

    一些 sn-p 使用 Ant Addon Flaka 迭代 csv 属性并在每次迭代时附加内容:

    <project xmlns:fl="antlib:it.haefelinger.flaka">
    
     <property name="foobar" value="Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda"/>
     <property name="foobaz" value="My,Ny,Xi,Omikron,Pi,Rho,Sigma,Tau,Ypsilon,Phi,Chi,Psi,Omega"/>
    
     <fl:for var="item" in="split('${foobaz}', ',')">
      <fl:let>foobar ::= concat('${foobar}',',#{item}')</fl:let>
     </fl:for>
    
    <echo>$${foobar} => ${foobar}</echo>
    
    </project>
    

    输出:

    [echo] ${foobaz} => Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,My,Ny,Xi,Omikron,Pi,Rho,Sigma,Tau,Ypsilon,Phi,Chi,Psi,Omega
    

    编辑
    很高兴你明白了,虽然我的 sn-p 有点愚蠢,因为有人会做到 一些简单的结果

    &lt;property name=someproperty value=${foobar},${foobaz}&gt;

    不知道您的要求的详细信息,但这是一个改编的 sn-p,为您的 csv 属性的任何项目添加 /length 后缀:

    <project xmlns:fl="antlib:it.haefelinger.flaka">
     <property name="foobar" value="Alpha,Beta,Gamma,Delta"/>
     <property name="foobaz" value=""/>
    
     <fl:for var="item" in="split('${foobar}', ',')">
      <fl:choose>
       <!-- avoid a leading ',' -->
       <fl:when test="'${foobaz}'.length eq 0">
        <fl:let>foobaz ::= concat('${foobaz}','#{item}/length#{item.length}')</fl:let>
       </fl:when>
       <fl:otherwise>
        <fl:let>foobaz ::= concat('${foobaz}',',#{item}/length#{item.length}')</fl:let>
       </fl:otherwise>
      </fl:choose>
     </fl:for>
     <!-- optionally overwrite ${foobar} with ${foobaz} --> 
     <fl:let>foobar ::= '${foobaz}'</fl:let>
    
     <echo>$${foobar} => ${foobar}</echo>
    </project> 
    

    输出:

    [echo] ${foobar} => Alpha/length5,Beta/length4,Gamma/length5,Delta/length5
    

    【讨论】:

    • 哇,谢谢……把我从蚂蚁地狱里救了出来(我没有使用确切的代码,但 concat 的东西确实救了我的培根!)
    【解决方案2】:

    尝试使用标准 Ant 任务 &lt;pathconvert&gt;。见http://ant.apache.org/manual/Tasks/pathconvert.html

    【讨论】:

    • 它实际上并不是一个文件集,而是一个看起来像“Samsung/GT-S5230N,Sagem/Cosy,Nokia/6131_SPC,Nokia/6131_NFC_SPC,Nokia/6212_NFC_SPC”的属性
    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 2016-07-29
    • 2013-10-05
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    相关资源
    最近更新 更多