2016-06-17 6 views
1

プロパティ値から部分文字列を長さで抽出する必要があります。 :私は位置別のAntサブ文字列

name 

値を取得したい

<property name="prop1" value="nameBLABLABLA" /> 

は、JavaScriptコードを使用せずに、それは可能ですか?

答えて

2

バニラアリではなく、
Antcontrib(最新リリース2006!)またはAnt FlakaのようなAntアドオンを追加する必要があります。追加のjar /ライブラリが必要になることを意味します。

<project> 

<!-- create a macrodef for reuse --> 
<macrodef name="getsubstring"> 
<attribute name="src"/> 
<attribute name="from"/> 
<attribute name="to"/> 
<attribute name="result"/> 
<sequential> 
    <script language="javascript"> 
    project.setProperty(
    "@{result}", "@{src}".substring(@{from},@{to}) 
    ); 
    </script> 
</sequential> 
</macrodef> 

<property name="foo" value="nameBLABLABLA"/> 

<getsubstring src="${foo}" from="0" to="4" result="foobar"/> 

<echo> $${foobar} => ${foobar}</echo> 

</project> 

必要はありません追加のライブラリ:JDK組み込みJavaScriptエンジンを使用して
は、それが同じくらい簡単です。
一般的な文字列のプロパティごとに機能するmacrodefを作成しました。
JavaScriptエンジンはJavascriptとJavaを理解しており、Ant APIにフルアクセスできます。

1

私はRebseの回答のようにJavaScriptを使用しますが、<loadresource><tokenfilter>を使用しないとこれを行う方法があります。これは、部分文字列の/ toではなくstart/lengthを使用します。

<macrodef name="getsubstring"> 
    <attribute name="src"/> 
    <attribute name="start"/> 
    <attribute name="length"/> 
    <attribute name="result"/> 
    <sequential> 
    <loadresource property="@{result}"> 
     <string value="@{src}}" /> 
     <filterchain> 
      <tokenfilter> 
      <replaceregex pattern="^.{@{start}}(.{@{length}}).*" replace="\1" /> 
      </tokenfilter> 
     </filterchain> 
    </loadresource> 
    </sequential> 
</macrodef> 

<property name="prop1" value="nameBLABLABLA" /> 
<getsubstring src="${prop1}" start="0" length="4" result="p"/> 
<echo message="${p}" /> 
+0

グレート!私のために働く。 –

関連する問題