2012-07-30 7 views
6

Die folgenden Zeilen sind in der Datei vorhanden. Ich möchte mehrere Daten aus dieser Datei extrahieren.Extrahieren von Wert aus einer Datei mit Ant

Anzahl der aktuellen Benutzerlisten erstellen: 23

  • 'RevisionBuild' Laufzeit (in Minuten) = 8,40

[Build] RC = 0

I Verwenden Sie die folgende Regex, um den Wert 23 aus dieser Datei

abrufen

Aber die gleiche Regex holt keinen Wert, wenn ich versuche, die anderen Zeilen wie regexp = "(. ) [revBuild] RC = (.) $“oder regexp = "(. ) 'RevisionBuild' Laufzeit (in Minuten) = (.) $", wo die extrahierten Werte sollten jeweils 0 und 8,40 sein.

Kann jemand bitte helfen? Danke, Aarthi

Antwort

9

ich denke, das ist das, was Sie interessiert sind. auf einer Eingabedatei wie unter

Number of current user build lists: 23 
'RevisionBuild' Run time (in minutes) = 8.40 
[Build] RC = 0 

, wenn ich unter dem Ziel ausführen

<project name="BuildModule" basedir="." default="extract.nums"> 
    <taskdef resource="net/sf/antcontrib/antlib.xml" /> 
    <property environment="env" /> 
    <loadfile property="file" srcfile="${basedir}/inputLog.log"/> 
    <target name="extract.nums"> 
     <for param="line" delimiter="${line.separator}" list="${file}"> 
      <sequential> 
       <propertyregex property="noOfBuildlists" input="@{line}" regexp="Number of current user build lists:\s*([0-9]+)$" select="\1" /> 
       <propertyregex property="revisionBuild" input="@{line}" regexp="'RevisionBuild' Run time\s*\(in minutes\)\s*=\s*([0-9\.]+)$" select="\1" /> 
       <propertyregex property="rcBuild" input="@{line}" regexp="\[Build\] RC\s*\=\s*([0-9]+)$" select="\1" /> 
      </sequential> 
     </for> 
     <echo message="Current user build : ${noOfBuildlists}" /> 
     <echo message="Revision Build : ${revisionBuild}" /> 
     <echo message="RC Build : ${rcBuild}" /> 
    </target> 
</project> 

Ich bekomme unter Ausgabe.

[echo] Current user build : 23 
[echo] Revision Build : 8.40 
[echo] RC Build : 0 
+0

Vielen Dank. Das funktioniert sehr gut. Können Sie bitte die Verwendung von \ s * erklären. Ich bemerke, dass Sie diese Regex immer dann verwenden, wenn ein Leerzeichen gefolgt von einem Sonderzeichen (wie (oder) oder = – user1384205

+0

'\ s' steht für Leerzeichen und' \ s * 'bedeutet null oder mehr Vorkommen für Leerzeichen. Dies wird mache den Ausdruck robuster und passender, selbst wenn es mehr Leerzeichen gibt oder wenn es keine gibt –

+0

Danke nochmal Vaman.Um eine Zeichenfolge zu suchen "Muss diese Buildliste kompiliert werden: true", habe ich folgende Regex versucht Braucht diese Buildliste kompilieren: \ s * ([rt] +) $ Die Regex funktioniert jedoch nicht – user1384205

1

Wenn ich propertyregex verwenden, veranlassen sie einen Fehler if doesn't support the nested "condition" element. Es gibt viele verschachtelte "Bedingung" -Elemente in meinem {android.sdk.air}/tools/ant/build.xml. Also habe ich versucht, eine Lösung zu finden, die Standard-Ant präsentieren kann. Ich habe es gemacht.

Dieses Versuchen:

<loadfile 
    encoding="UTF-8" 
    property="property.for.your.string" 
    srcFile="your/file/path" > 
     <filterchain> 
      <tokenfilter> 
       <containsregex 
        pattern="Number of current user build lists:\s*([0-9]+)$" 
        replace="\1" /> 
      </tokenfilter> 
     </filterchain> 
</loadfile> 

<echo message="DEBUG LOG: property.for.your.string = ${property.for.your.string}" /> 

Es macht mich fragen, warum ant Namen das Attribut als „ersetzen“, die zu meinem Missverständnis führt.

Verwandte Themen