2012-11-19 18 views
3

我想要讀取c#中的.txt文件,並將字符串中的一行過濾出來,只顯示該行。如果匹配在第一行,我使用streamreader.ReadLine獲得了很好的輸出。但如果它在第二行,我需要過濾它。 (ⅰ因子評分通過創建的ReadLine循環?) 預先感謝從字符串c中過濾出一行#

 private void comboBox3_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     StreamReader sr = new StreamReader(textBox1.Text); 
     string BoxLM1 = sr.ReadLine(); 

     if (comboBox3.Text == "Anderlecht") 
     { 
      if (BoxLM1.Contains("Anderlecht")) 
      { 
      label5.Text = BoxLM1; 
      } 

      else 
      { 
       string BoxLM2 = sr.ReadToEnd(); 



        MessageBox.Show(BoxLM2); 

      } 

回答

5

可以一次使用File.ReadLines()方法和LINQ查詢所有行:

var firstAnderlecht = File.ReadLines(textBox1.Text).FirstOrDefault(s => s.Contains("Anderlecht")); 
if (firstAnderlecht != null) { 
    label5.Text = firstAnderlecht; 
} 

ReadLines產生從線的可枚舉文件;使用FirstOrDefault方法,您可以將條件應用於文件的所有行而無需循環,並選擇條件適用的第一行。

+1

*'但如果它是在第二行,我需要得到它過濾* * –

+0

@LB我認爲這是指OP的實現,基本上說他的代碼已經適用於第一行,但他需要讓它在第二行工作等等。 – dasblinkenlight

+1

ReadLines的+1。但是您需要將'BoxLM1'設置爲'。First(s => s.Contains(「Anderlecht」)',否則它仍然指向第一行。 –

0

如果您想在大的文件,我建議使用這個迭代:

private static IEnumerable FileIterator(String filePathe) 
    { 
     using (StreamReader streamReader = new StreamReader(filePathe)) 
     { 
      String line; 
      while ((line = streamReader.ReadLine()) != null) 
      { 
       yield return line; 
      } 
      yield break; 
     } 
    } 

它會阻止完整文件的加載到RAM