2016-11-26 82 views
1

我想出瞭如何使用StreamReader來讀取文本文件。現在我必須創建一個數組,並在價格index[1]中合計所有的值。創建從使用StreamReader獲得的數組和總值

我的數據如下:

黃色出租車,62.12,16年10月17日

福來雞,9.50,16年10月18日

我目前只有10條線路,但是,未來可能會有更多的線路被添加。

我想在txtBox_Total.text = Total.ToString();

這裏添加62.12和9.50,並進入總被我當前的代碼:

private void btn_CalculateLoadExpenses_Click(object sender, EventArgs e) 
{ 
    string currentLine; 
    // Create StreamReader object to read Exams.txt 
    StreamReader examsReader = new StreamReader("TravelExpenses.txt"); 

    listBox_Output.Items.Clear(); 

    while (examsReader.EndOfStream == false) 
    { 
     currentLine = examsReader.ReadLine(); 
     listBox_Output.Items.Add(currentLine); 
    } 
} 
+0

'File.ReadAllLines'是一個容易得多如Damith的答案提示。如果你真的想在某種情況下使用'StreamReader',你應該在使用它之後關閉**閱讀器,或者在'using'語句中包裝流。 'File.ReadAllLines'會自動爲你做這個。 – Jim

+0

@Jim:在此期間更容易但更慢。 StreamReader更好。 – Transcendent

+1

@Transcendent是的,這是正確的,我的評論並不意味着'File.ReadAllLines'更快。但事實上,值得一提的是贊成和反對者是什麼。謝謝。 ...我不得不提這也取決於文件的大小。如果該文件僅包含例如20行......差異將會是* 0.007 ms *或多或少。 – Jim

回答

1

您可以閱讀以外的所有線路使用File.ReadAllLines

string[] lines = File.ReadAllLines("TravelExpenses.txt"); 

然後添加全部使用Items.AddRange

listBox_Output.Items.AddRange(lines); 

和一個從字符串通過拆分採取和採取數之和像下面

var Total= lines.Select(line =>line.Split(',')[1]).Select(num =>decimal.Parse(num)).Sum(); 
txtBox_Total.text = Total.ToString(); 
+0

'ReadAllLines'很慢。在StreamReader中使用'ReadLine'方法是一種讀取文件的更快的方法。而你的方式也使整個事情變得更慢。 – Transcendent

+1

是的,的確如此。但它取決於文件大小,您不會注意到小文件的性能增益。 (在列表框上顯示100萬條記錄是不實際的) – Damith

+0

嗯,我經常在數據挖掘項目上工作,在我需要加載大型純文本文件的地方。我注意到'ReadAllLines'可以簡單地延遲包含10,000行或更多行的文本文件。這種純文本文件的大小並不少見(在現實世界的情況下),這就是爲什麼我對你的文章發表評論,否則對於小文件你的方法就沒有問題。 – Transcendent

0

我必須使用的StreamReader這個任務。這是我寫的更多代碼。有些東西仍然不正確,因爲我的總計不工作。恐怕我會讓它變得比需要的更復雜。

私人無效btn_CalculateLoadExpenses_Click(對象發件人,EventArgs的) {

 string[] purchase = new string[10]; 
     float[] price = new float[10]; 

     int index = 0; 

     string currentLine; 
     string[] fields; 
     float purchaseTotal, total = 0; 
     // Create StreamReader object to read Exams.txt 
     StreamReader examsReader = new StreamReader("TravelExpenses.txt"); 

     listBox_Output.Items.Clear(); 

     while (examsReader.EndOfStream == false) 
     { 
      currentLine = examsReader.ReadLine(); 
      fields = currentLine.Split(','); 
      listBox_Output.Items.Add(currentLine); 

      purchase[index] = fields[0]; 
      price[index] = total; 

      index++; 
      purchaseTotal = total; 

      txt_Box_Total.Text = total.ToString(); 
     } 

     examsReader.Close(); 
    }