2012-07-30 13 views
6

का उपयोग कर निम्नलिखित लाइनों फ़ाइल में मौजूद हैं। मैं इस फाइल से कई डेटा निकालना चाहता हूं।एक फ़ाइल से मूल्य निकालने चींटी

वर्तमान उपयोगकर्ता की संख्या सूचियां बनाएं: 23

  • 'RevisionBuild' भागो समय (मिनट में) = 8,40

[बिल्ड] आर सी = 0

मैं निम्नलिखित regex इस्तेमाल किया इस फ़ाइल से मूल्य 23 को पुनः प्राप्त करने

<ac:for param="line" list="${logFileContent}" delimiter="${line.separator}"> 
    <sequential>       
<propertyregex property="noOfBuildlists" 
     input="@{line}" 
    regexp="(.*)Number of current user build lists: (.*)$" 
    select="\2"/> 
    </sequential> 
</ac:for> 

लेकिन इसके साथ ही रेगुलर एक्सप्रेशन से किसी भी मूल्य लाने नहीं है जब मैं अन्य लाइनों जैसे regexp = "(लाने के लिए प्रयास करें। ) [revBuild] आर सी = (।) $ "या regexp =" (। ) 'RevisionBuild' भागो समय (मिनट में) = (।) $ "जहां निकाले मान 0 होना चाहिए और 8.40 क्रमशः।

किसी कृपया मदद कर सकते हैं? धन्यवाद, आरती

उत्तर

9

मैं की तरह

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

जब मैं लक्ष्य से निष्पादित लगता है कि यह है कि क्या आप में रुचि रखते हैं। कोई इनपुट फ़ाइल पर

01,235,
<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> 

मैं उत्पादन नीचे मिलता है।

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

धन्यवाद एक टन। यह बहुत अच्छी तरह से काम करता है। क्या आप कृपया \ s * के उपयोग की व्याख्या कर सकते हैं। मैंने देखा है कि आप इस रेगेक्स का उपयोग हर बार एक विशेष चरित्र (जैसे (या) या = – user1384205

+0

'\ s 'व्हाइटस्पेस वर्ण का प्रतिनिधित्व करते हैं और' \ s *' का अर्थ है व्हाइटस्पेस वर्णों के लिए शून्य या अधिक घटनाओं का मतलब है। अभिव्यक्ति को और अधिक मजबूत बनाते हैं और यदि कोई रिक्त स्थान नहीं है या कोई भी नहीं है तो –

+0

धन्यवाद फिर से वामन। इसलिए एक स्ट्रिंग को खोजने के लिए "क्या इस बिल्डलिस्ट को संकलन की आवश्यकता है: सत्य", मैंने निम्नलिखित रेगेक्स को आजमाया है क्या इस बिल्डलिस्ट की आवश्यकता है संकलन: \ s * ([आरटी] +) $ हालांकि रेगेक्स काम नहीं करता है। – user1384205

1

जब मैं propertyregex उपयोग करते हैं, यह एक त्रुटि if doesn't support the nested "condition" element संकेत। मेरे {android.sdk.air}/tools/ant/build.xml में कई नेस्टेड "हालत" तत्व हैं। इसलिए मैंने एक समाधान खोजने की कोशिश की जो मानक चींटी उपस्थित हो सकती है। मैने कर दिखाया।

इस प्रयास करें:

<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}" /> 

यह मुझे आश्चर्य बनाता है क्यों चींटी नाम "की जगह" के रूप में विशेषता है, जो मेरी गलतफहमी हो जाती है।

संबंधित मुद्दे