2010-09-16 17 views
12

Czy Ant ma jakiś sposób na manipulowanie ciągiem wielkich/małych liter/captialize/uncaptialize string? Spojrzałem na PropertyRegex, ale nie sądzę, że te dwie ostatnie są możliwe. Czy to coś jeszcze?Funkcje ciągu znaków?

+0

Zobacz także: http://stackoverflow.com/questions/7129672/uppercase-lowercase-capitalize-an-ant-property/7131195#7131195 –

Odpowiedz

0

można użyć zadania script i używać języka skryptowego jsr223 obsługiwane jak javascript, jruby, jython ... zrobić swój ciąg obsługi

14

From this thread, należy użyć Ant <script> zadanie:

<target name="capitalize"> 
    <property name="foo" value="This is a normal line that doesn't say much"/> 

    <!-- Using Javascript functions to convert the string --> 
    <script language="javascript"> <![CDATA[ 

     // getting the value 
     sentence = project.getProperty("foo"); 

     // convert to uppercase 
     lowercaseValue = sentence.toLowerCase(); 
     uppercaseValue = sentence.toUpperCase(); 

     // store the result in a new property 
     project.setProperty("allLowerCase",lowercaseValue); 
     project.setProperty("allUpperCase",uppercaseValue); 

    ]]> </script> 

    <!-- Display the values --> 
    <echo>allLowerCase=${allLowerCase}</echo> 
    <echo>allUpperCase=${allUpperCase}</echo> 
</target> 

Wyjście

D:\ant-1.8.0RC1\bin>ant capitalize 
Buildfile: D:\ant-1.8.0RC1\bin\build.xml 

capitalize: 
    [echo] allLowerCase=this is a normal line that doesn't say much 
    [echo] allUpperCase=THIS IS A NORMAL LINE THAT DOESN'T SAY MUCH 

BUILD SUCCESSFUL 

Aktualizacja za komentarz WarrenFaith do oddzielenia skrypt do innego celu i przekazać właściwość od zwany targetpowrotem do wywołującego cel

Korzystanie antcallback ze słoika ant-contrib

<target name="testCallback"> 
    <antcallback target="capitalize" return="allUpperCase"> 
     <param name="param1" value="This is a normal line that doesn't say much"/> 
    </antcallback> 
    <echo>a = ${allUpperCase}</echo> 
</target> 

i capitalise zadanie zastosowania przekazany w param1 zatem

<target name="capitalize"> 

     <property name="foo" value="${param1}"/> 

wyjście końcowe

[echo] a = THIS IS A NORMAL LINE THAT DOESN'T SAY MUCH 
+0

Wierzę, że to działa tylko z jdk1.6 +. – kfox

+0

Chociaż jest łatwiej z Javą 6, to działa z Javą 5, ale musisz podać implementację swojego języka skryptowego, np. Rhino dla JavaScript. –

+0

@JoseK: Czy wiesz, w jaki sposób mogę oddzielić skrypt od celu? Kiedy to zrobię, właściwość zmieniła się w celu, ale później przywrócona zostanie stara wartość. Moim problemem jest to, że chcę uczynić główny cel tak małym, jak to tylko możliwe, aby nawet nie-programista mógł zmieniać właściwości. Dzięki – WarrenFaith