2016-06-17 9 views
1

Ich muss einen Teilstring aus Eigenschaft Wert von Länge extrahieren, z. :
Ant-Substring nach Position

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

möchte ich den Wert bekommen

name 

Ist es möglich, ohne Javascript-Code zu verwenden?

Antwort

2

Nicht mit Vanille Ameise, müssten Sie einige Ant-Addon wie
Antcontrib (neueste Version 2006!) Oder Ant Flaka hinzufügen - bedeutet, dass Sie zusätzliche Gläser/Bibliotheken benötigen.
mit der jdk gebautet Javascript-Engine ist es so einfach wie:

<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> 

keine zusätzlichen Bibliotheken erforderlich.
Erstellt ein Makrodef, das für Eigenschaften bzw. für Strings im Allgemeinen funktioniert.
Die JavaScript-Engine versteht Javascript und Java und Sie erhalten vollen Zugriff auf Ant API.

1

Ich würde JavaScript wie in Rebses Antwort verwenden, aber es gibt eine Möglichkeit, dies ohne <loadresource> und <tokenfilter> zu tun. Dies verwendet Start/Länge anstelle von/für den Teilstring:

<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

Großartig! Funktioniert bei mir. –

Verwandte Themen