2008-09-25 26 views
9

Bir Ant derleme komut dosyasından bir kaynak dosyada bir sayı artırmalıyım. Artırmak istediğim numarayı bulmak için ReplaceRegExp görevini kullanabilirim, ancak bu sayıyı replace özniteliğinde nasıl artırırım? Şimdiye kadar var İşte neyiKarınca 'ReplaceRegExp' görevindeki matematik işlevlerini nasıl yürütebilirim?

: yapardım nasıl yerine özniteliği olarak

<replaceregexp file="${basedir}/src/path/to/MyFile.java" 
    match="MY_PROPERTY = ([0-9]{1,});" 
    replace="MY_PROPERTY = \1;"/> 

,

replace="MY_PROPERTY = (\1 + 1);" 

Bir değeri saklamak için buildnumber görevi kullanamaz Ben zaten aynı yapı hedefinde kullanıyorum beri dosya. Bir mülk artışı yapmama izin verecek başka bir karınca görevi var mı? böylece karınca görev propertyfile olan

<propertyfile file="${version-file}"> <entry key="revision" type="string" operation="=" value="${revision}" /> <entry key="build" type="int" operation="+" value="1" />

:

+0

Kaldır 'düzenli ifadeler' etiketi –

cevap

4

Sen gibi bir şey kullanabilirsiniz.

0

İyi bir soru, buna benzer perlle yapılabilir, ama bunun karınca, .NET ve diğer alanlarda mümkün olmadığını düşünüyorum .. Eğer yanılıyorsam, gerçekten bilmek isterim, çünkü bu bir Perl'de kullandığım serin konsepti, bahsettiğiniz gibi gerçekten kullanabileceğim birçok kez.

4

Karıncalarda, her zaman kalıbın içine sığmayan küçük durumlar için geri dönüş "komut dosyası" etiketine sahipsiniz. İşte yukarıdaki hızlı (dağınık) uygulaması var:

<property name="propertiesFile" location="test-file.txt"/> 

    <script language="javascript"> 
     regex = /.*MY_PROPERTY = (\d+).*/; 

     t = java.io.File.createTempFile('test-file', 'txt'); 
     w = new java.io.PrintWriter(t); 
     f = new java.io.File(propertiesFile); 
     r = new java.io.BufferedReader(new java.io.FileReader(f)); 
     line = r.readLine(); 
     while (line != null) { 
      m = regex.exec(line); 
      if (m) { 
       val = parseInt(m[1]) + 1; 
       line = 'MY_PROPERTY = ' + val; 
      } 
      w.println(line); 
      line = r.readLine(); 
     } 
     r.close(); 
     w.close(); 

     f.delete(); 
     t.renameTo(f); 
    </script> 
+0

bunu işaret için, önce komut etiketi genelinde sayesinde gelmemek! Ben kullanarak daha iyi olduğunu düşünüyorum. – roryf

İlgili konular