ant - una - substring c# ultimos caracteres




Cómo sacar una subcadena en Ant (4)

¿Hay alguna manera de extraer una subcadena de una propiedad Ant y colocar esa subcadena en su propiedad?


Como prefiero usar Ant de Vainilla, utilizo un archivo temporal. Funciona en todas partes y puede aprovechar replaceregex para deshacerse de la parte de la cadena que no desea. Ejemplo para munging mensajes de Git:

    <exec executable="git" output="${git.describe.file}" errorproperty="git.error" failonerror="true">
        <arg value="describe"/>
        <arg value="--tags" />
        <arg value="--abbrev=0" />
    </exec>
    <loadfile srcfile="${git.describe.file}" property="git.workspace.specification.version">
        <filterchain>
           <headfilter lines="1" skip="0"/>
           <tokenfilter>
              <replaceregex pattern="\.[0-9]+$" replace="" flags="gi"/>
           </tokenfilter>
           <striplinebreaks/>
        </filterchain>
    </loadfile>

Me gustaría ir con la fuerza bruta y escribir una tarea Ant personalizada:

public class SubstringTask extends Task {

    public void execute() throws BuildException {
        String input = getProject().getProperty("oldproperty");
        String output = process(input);
        getProject().setProperty("newproperty", output);
    }
}

Lo que queda es implementar el String process(String) y agregar un par de setters (por ejemplo, para los valores de newproperty oldproperty y de newproperty )


Usaría la tarea de script para ese propósito, prefiero Ruby, por ejemplo, cortar los primeros 3 caracteres =

<project>
  <property name="mystring" value="foobarfoobaz"/>  
   <target name="main"> 
    <script language="ruby">
     $project.setProperty 'mystring', $mystring[3..-1]
    </script>
    <echo>$${mystring} == ${mystring}</echo>
   </target>    
  </project>

salida =

main:
     [echo] ${mystring} == barfoobaz

El uso de la API api con el método project.setProperty () en una propiedad existente lo sobrescribirá, de esa forma se puede evitar el comportamiento estándar de las hormigas, significa que las propiedades una vez establecidas son inmutables.


Utilizo scriptdef para crear una etiqueta javascript en subcadena, por ejemplo:

 <project>
  <scriptdef name="substring" language="javascript">
     <attribute name="text" />
     <attribute name="start" />
     <attribute name="end" />
     <attribute name="property" />
     <![CDATA[
       var text = attributes.get("text");
       var start = attributes.get("start");
       var end = attributes.get("end") || text.length();
       project.setProperty(attributes.get("property"), text.substring(start, end));
     ]]>
  </scriptdef>
  ........
  <target ...>
     <substring text="asdfasdfasdf" start="2" end="10" property="subtext" />
     <echo message="subtext = ${subtext}" />
  </target>
 </project>