2013-03-13 82 views
0

我需要能夠讀取一行行的文本文件,並獲得該行的內容時,它具有一定的文字開始,但它並不總是那裏,它給了我空返回並影響我的datagridview。如何讀取塊的文本文件,返回的特定行

我想做一個方法,當它看到第一行(源:始終存在)並讀取其他行時,將讀取塊中的數據,如果該行不存在,則設置與其關聯的變量作爲「」。

例如文本文件將是

源:C:\
MRU:1
MRU時間:12/12/2013

源:C:\
MRU:2
MRU時間:13/12/2013

源:C:\
MRU時間:二〇一三年十二月一十日
//注意到沒有MRU

這裏是我使用來獲取行,如果它包含字符串代碼:

String line = file.ReadLine(); 
if (line.StartsWith("source")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine);   
     } 

     if (line.Contains("MRU")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine); 
     } 

     if (line.Contains("MRU time")) 
     { 
      richTextBox1.AppendText((line) + Environment.NewLine); 
     } 
+0

我不知道我理解你的問題。你從上面的代碼得到的結果是什麼?首先,如果看起來您只在以「source」開頭的行上進行所有處理,但您最多有3條可能的單獨行,對吧?所以你需要3 if語句,if(line.StartsWith(「source」)),否則if(line.Contains(「MRU time」))和else if(line.Contains(「MRU」))。請注意,如果您需要區分具有MRU時間和MRU的線路,則需要按順序排列它們。 – Melanie 2013-03-13 19:48:28

+0

基本上我需要讀取'塊'中的數據,其中第一行始終始於源,並以下一塊之間的間隔結束。所以我做了如果聲明來找到源代碼,但是這貫穿所有的行,而不是'塊' – 2013-03-14 11:32:08

回答

0

這裏有一個控制檯應用程序,並正是你需要的。只需改變它以適應您的需求。你的主要問題是你沒有一個空檢查。這也包含在較小的功能,所以它是一個更清潔(至少對我來說)

static void Main(string[] args) 
    { 
     ReadFile(); 
    } 

    private static void ReadFile() 
    { 
     StreamReader SR = new StreamReader(@"C:\Users\bharrison\Desktop\test.txt"); 
     Console.WriteLine("Reading file"); 
     while (!SR.EndOfStream) 
     { 
      string ReturnedValue = AnalyzeString(SR.ReadLine()); 
      Console.WriteLine(ReturnedValue); 
     } 
     Console.ReadLine(); 
    } 

    private static string AnalyzeString(string line) 
    { 
     string TempLine = line; 

     if (TempLine != null && TempLine != "") 
     { 

      if (TempLine.Contains("source")) 
      { 
       return TempLine; 
      } 

      if (TempLine.Contains("MRU")) 
      { 
       return TempLine; 
      } 

      if (TempLine.Contains("MRU Time")) 
      { 
       return TempLine; 
      } 
     } 
     else 
     { 
      return " "; 
     } 
     return " "; 
    } 
相關問題