2014-10-31 363 views
1

編輯:如何在從StreamReader讀取時跳過csv數據的標題?

我有以下代碼:

private void button1_Click_1(object sender, EventArgs e) 
{ 
    var date = new List<String>(); 
    var value = new List<Double>(); 

    string dir = @"C:\Main\test.csv"; 

    using (var reader = new System.IO.StreamReader(dir)) 
    { 
     var lines = File.ReadLines(dir) 
         .Skip(1);//Ignore the first line 

      foreach (var line in lines) 
      { 
       var fields = line.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); 
       date.Add(fields[0]); 
       if (fields.Length > 1) 
        value.Add(Convert.ToDouble(fields[1])); 
      } 


    String[] _date = date.ToArray(); 
    Double[] _value = value.ToArray(); 


    chart1.Series["Test"].Points.DataBindXY(_date,_value); 
    chart1.Series["Test"].ChartType = SeriesChartType.Spline; 
    } 
} 

現在我想跳過CSV數據的標題。這意味着第一列的第一行和第二列的第一行。怎麼做?

標題是字符串。當沒有標題時,他會跳過第一行,但與標題我得到一個System.FormatException。

它當第一行包含在如一個第二柱(用文本編輯打開的)的第一列和價值日期失敗:

「日期」,「值」

「20.04。 2010 「;」 82.6619508214314"

「21.04.2010」; 「33.2262968571519」

「2010年4月22日」, 「25.0174973120814」

+3

_前面添加一個reader.ReadLine()「這意味着第一列和第二列的第一行的第一行。」 _所以第一row;) – 2014-10-31 10:58:04

+0

之前,你的while循環只需添加'reader.ReadLine()' – 2014-10-31 10:59:02

回答

6

爲什麼不直接從閱讀一行開始,對此無所適從?

using (var reader = new System.IO.StreamReader(dir)) 
{ 
    reader.ReadLine(); // skip first 

    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
    } 
} 
+0

是的:/我已編輯我的帖子 – uzi42tmp 2014-10-31 11:34:18

+0

爲什麼他不想跳過行時有字符串(問題應該與第二個列,因爲它被轉換爲雙) - 否則它將工作 – uzi42tmp 2014-10-31 11:37:41

+0

@ uzi42tmp:你可以在你的文章中顯示一個示例文檔失敗? – 2014-10-31 11:38:21

1

做while循環

using (var reader = new System.IO.StreamReader(dir)) 
{ 
    if (reader.ReadLine()) //read first line 
    { 
    string line; 
    while ((line = reader.ReadLine()) != null) //read following lines 
    { 
    } 
    } 
} 
相關問題