2013-10-01 2 views
0

필자는 개미를 사용하는 데 필요한 두 개의 매개 변수를 쉼표로 구분하여 추출해야하며,이 매개 변수는 세미콜론으로 구분 된 전달되는 유사한 매개 변수 쌍으로 구분됩니다.ant-contrib for 루프와 개미 스크립트에서의 정규식

<?xml version="1.0"?> 

<project name="" basedir="." default="test" xmlns:ac="antlib:net.sf.antcontrib"> 
<target name="test" > 
<echo message="Hey There I am using What's App" /> 
<ac:for list="asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu" delimiter=";" param="val"> 
<ac:sequential> 
<ac:propertyregex property="param1" 
      input="@{val}" 
      regexp="([^\.]*)\,.*" 
      select="\1" 
      casesensitive="true" /> 
<ac:propertyregex property="param2" 
      input="@{val}" 
      regexp=".*,([^\.]*)" 
      select="\1" 
      casesensitive="true" /> 
<echo message = "val = ${param1}"/> 
<echo message = "value = ${param2}"/> 
</ac:sequential> 
</ac:for> 
</target> 
</project> 

하지만 같은 출력을 얻고있다 : 현재 내가 같은 일을하고

Buildfile: /tmp/Manish/build.xml 

test: 
[echo] Hey There I am using What's App 
[echo] val = asdfg 
[echo] value = dasfdf 
[echo] val = asdfg 
[echo] value = dasfdf 
[echo] val = asdfg 
[echo] value = dasfdf 

그래서이 루프지고 3 회 (올바른)하지만의 전달 첫 번째 값 루프 매개 변수. 내가 만드는 명백한 실수가 있습니까?

감사합니다, 개미의 마니 쉬 조쉬

+0

당신은 개미에 대한 큰 일을 놓치고 : 그것은 스크립트 언어 아니다. 속성은 변수가 아니며 불변입니다. 요구 사항이 툴링과 일치하지 않습니다. 개미에는 매개 변수가 없습니다. – thekbb

+0

개미에는 매개 변수가 있습니다. 매크로 정의가 그 것이다. 항상 macrodef에 관해서 얼마나 적은 사람들이 지금 얼마나 즐겁고 지나치게 복잡하고 유지 보수가 안되는 개미 스크립트를 목표로 모든 것을하려고 노력합니다. –

답변

-1

속성을 변경할 수 있습니다. 당신은 (그것을 권장하지 않습니다 있지만) 속성을 설정 해제하는 개미-있는 contrib에서 variable task를 사용해야합니다 :

<ac:for list="asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu" delimiter=";" param="val"> 
<ac:sequential> 
<ac:propertyregex property="param1" 
      input="@{val}" 
      regexp="([^\.]*)\,.*" 
      select="\1" 
      casesensitive="true" /> 
<ac:propertyregex property="param2" 
      input="@{val}" 
      regexp=".*,([^\.]*)" 
      select="\1" 
      casesensitive="true" /> 
<echo message = "val = ${param1}"/> 
<echo message = "value = ${param2}"/> 
<ac:var name="param1" unset="true"/> 
<ac:var name="param2" unset="true"/> 
</ac:sequential> 
</ac:for> 
+0

감사합니다! :) –

1

다른 방법은 groovy 같은 스크립트 언어를 사용하는 것입니다.

<groovy> 
    <arg value="asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu"/> 

    args[0].tokenize(";").each { 
     def m = it.tokenize(",") 

     println "val = ${m[0]}" 
     println "value = ${m[1]}" 
    } 
    </groovy> 
0

또는 ant addon Flaka, f.e.를 사용하십시오. :

<project xmlns:fl="antlib:it.haefelinger.flaka"> 

<!-- with cvs property --> 
<property name="foobar" value="asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu"/> 
<fl:for var="item" in="split('${foobar}', ';')"> 
    <fl:let> 
    param1 ::= split(item, ',')[0] 
    param2 ::= split(item, ',')[1] 
    </fl:let> 
    <echo> 
    $${param1} => ${param1} 
    $${param2} => ${param2} 
    </echo> 
</fl:for> 

<!-- with list inline --> 
<fl:for var="item" in="split('asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu', ';')"> 
    <fl:let> 
    param1 ::= split(item, ',')[0] 
    param2 ::= split(item, ',')[1] 
    </fl:let> 
    <echo> 
    $${param1} => ${param1} 
    $${param2} => ${param2} 
    </echo> 
</fl:for> 

</project> 

공지 이중 ':'PARAM1에서 :: = 스플릿 (항목 '') [0]에있는 (커맨드의 인수로 -Dkey = 통해 정의 값을 또한 userproperties) 재정의 수단 기존 속성 반면 ': ='속성을 만들지 만 속성이 이미 있으면 덮어 쓰지 않습니다.

2

대신에 forach를 사용하고 propertyregex를 별도의 대상에 넣으십시오. 다음은 개미 스크립트의 예제입니다. 기본적으로 똑같은 일을합니다.

<target name="loadTestStatic" depends="setTargetEnv,setPassword"> 
    <loadfile property="controlFile" srcFile="${projectDir}/test/config/static/controlFile.txt"/> 

    <foreach list="${controlFile}" delimiter="${line.separator}" param="descriptor" target="loadConfig"/> 
</target> 

<target name="loadConfig"> 
    <if> 
     <matches string="${descriptor}" pattern="^camTool:"/> 
     <then> 
      <propertyregex property="camToolFile" 
          input="${descriptor}" 
          regexp="camTool:(.*)" 
          select="\1" 
          casesensitive="false" /> 
      <echo message="Got cam tool file ${camToolFile}"/> 
      <camTool file="${camToolFile}"/> 
     </then> 
     <else> 
      <!-- todo: add CM Tool, SQL as required --> 
      <echo message="Unexpected config ${descriptor} ignored"/> 
     </else> 
    </if> 
</target> 
0
<target name="myTarget"> 
     <ac:propertyregex property="param1" 
       input="${myValue}" 
       regexp="([^\.]*)\,.*" 
       select="\1" 
       casesensitive="true" /> 
     <ac:propertyregex property="param2" 
       input="${myValue}" 
       regexp=".*,([^\.]*)" 
       select="\1" 
       casesensitive="true" /> 
     <echo message = "val = ${param1}"/> 
     <echo message = "value = ${param2}"/> 
    </target> 

    <ac:for list="asdfg,dasfdf;vxxexqxx,hyyypyly;dksfgsgdgf,abaifuacu" delimiter=";" param="val"> 
    <ac:sequential> 
     <antcall target="myTarget"> 
      <param name="myValue" value="@{val}" /> 
     </antcall> 
    </ac:sequential> 
    </ac:for>