2013-05-18 92 views
0

對不起,我的英語不好,請幫助,如果可以的話。使用正則表達式在文件中查找字符串

private void button1_Click(object sender, EventArgs e) 
      { 
       if (File.Exists(@"data.txt")) 
       { 
        System.IO.StreamReader file = new System.IO.StreamReader(@"data.txt"); 

        while (file.EndOfStream != true) 
         { 
         string s = file.ReadLine(); 
         string s2 = file.ReadLine(); 
         string s3 = file.ReadLine(); 
         string s4 = file.ReadLine(); 

         Match m = Regex.Match(s, "ID\\s"); 
         Match m2 = Regex.Match(s2, "Spec\\s"); 
         Match m3 = Regex.Match(s3, "Category\\s"); 
         Match m4 = Regex.Match(s4, "Price\\s"); 

         if (m.Success && m2.Success && m3.Success && m4.Success) 
         { 

          // some code 

         } 
         } 
       } 
       if (!File.Exists(@"data.txt")) MessageBox.Show("The file is missing!"); 
      } 

文本文件的內容:

ID 560 
Spec This ... bla bla 

blah... 
blah... 
bla bla 
bla 
Category Other 
Price $259.95 


ID 561 
Spec more blah blah... 

blah... 
blah... 
bla bla 
bla 
Category Other 
Price $229.95 

我只想ID後得到的文字,一切Spec後直到Category。 在此示例中(上文)我需要:

560 

This ... bla bla 

    blah... 
    blah... 
    bla bla 
    bla 


561 

more blah blah... 

    blah... 
    blah... 
    bla bla 
    bla 

等等,直至到達文件結束。

回答

0

我像這樣分析了一堆文件。使用文本閱讀器將數據讀入像下面這樣的Ienumerable。這不是工作代碼,而是給你這個概念。它應該讓你走向正確的方向。

TextReader reader = new StreamReader(path); 
IEnumerable<string> data = this.ReadLines(reader); 

foreach (var s in data){ 
    // make sure its not null doesn't start with an empty line or something. 
    if (s != null && !string.IsNullOrEmpty(s) && !s.StartsWith(" ") && s.Length > 0){ 
     s = s.ToLower().Trim(); 

     // use regex to find some key in your case the "ID". 
     // look into regex and word boundry find only lines with ID 
     // double check the below regex below going off memory. \B is for boundry 
     var regex = new Regex("\BID\B"); 
     var isMatch = regex.Match(s.ToLower()); 
     if(isMatch.Success){ 
      // split the spaces out of the line. 
      var arr = s.split(' '); 
      var id = arr[1]; // should be second obj in array. 

     } 

    } 
} 

這是一個解析文件,我在一個實際的項目中使用了這種非常類型的文本文件。它使用xml文件進行模板化,以便該文件可用於各種文件。但是它會讓你瞭解什麼是可能的,或者可能有其他一些想法可以幫助你。 parse.cs

+0

感謝隊友,但我是C#中的新成員,無法自制。 – user2395751

+0

以上實際上應該對你很接近。只需將「路徑」替換爲相關文件的路徑即可。 Stack的設計並非真正提供完整的解決方案。如果你需要聘請某人,你可能會檢查ODesk或類似的東西。真的,你應該嘗試以上,但它應該是相當接近。歡迎編輯/回覆,我會幫你解決這個問題。 – origin1tech

+0

感謝您的建議,也許我應該試試! – user2395751

相關問題