2012-02-01 146 views
17

我有我的以下代码来读取csv文件中的值并做一些处理。我想跳过输入csv文件的第一行,因为它包含标题文本,但我想在处理完成后将其添加回来。如何使用流读取器读取csv时跳过第一行

List<string> values = new List<string>(); 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    while (sr.Peek() != -1) 
    { 
     string line = sr.ReadLine(); 
     List<string> lineValues = line.Split(',').ToList(); 
     var tempMinInt = 1; 
     var tempValue = 1; 
     var tempValInt = Convert.ToInt32(lineValues[4]); 
     if (lineValues[3] == "1876") 
     { 
      if (tempValInt % 60 != 0) 
      { 
       tempMinInt = (tempValInt/60) + 1; 
       tempValue = tempMinInt * 30; 
      } 
      else 
      { 
       tempMinInt = tempValInt/60; 
       tempValue = tempMinInt * 30; 
      } 
     } 
     else if (lineValues[3] == "1875") 
     { 
      if (tempValInt != 0) 
      { 
       tempValue = 500; 
      } 
      else 
       tempValue = 0; 
     } 

     if (lineValues[3] == "1876") 
     { 
      values.Add(string.Join(",", lineValues) + "," + "0" + "," + "30" + "," + tempValue.ToString()); 
     } 
     else if (lineValues[3] == "1875") 
     { 
      values.Add(string.Join(",", lineValues) + "," + "1" + "," + "500" + "," + tempValue.ToString()); 
     } 

    } 
} 

样品输入CSV看起来是这样的:

id, datetime, msisdn, num, duration 
33083,2011-12-19 05:17:57+06:30,98590149,1875,258 
33084,2011-12-19 05:22:28+06:30,98590149,1875,69 
33085,2011-12-19 05:23:45+06:30,98590149,1875,151 
33086,2011-12-19 05:30:21+06:30,98590149,1875,58 
33087,2011-12-19 06:44:19+06:30,949826259,1875,66 

,我想有一个像这样我的输出:

id, datetime, msisdn, num, duration, type, ammount, total 
33083,2011-12-19 05:17:57+06:30,98590149,1875,258,1,500,500 
33084,2011-12-19 05:22:28+06:30,98590149,1875,69,1,500,500 
33085,2011-12-19 05:23:45+06:30,98590149,1875,151,1,500,500 
33086,2011-12-19 05:30:21+06:30,98590149,1875,58,1,500,500 

回答

39

最初只是读它你进入循环前。我应该这样做:

using (StreamReader sr = new StreamReader(filePath)) 
{ 
    string headerLine = sr.ReadLine(); 
    string line; 
    while ((line = sr.ReadLine()) != null) 
    { 
     ... 
    } 
} 

(我不喜欢使用窥视,个人)

然后,当你写出来的输出,开始headerLine

1

您可以在while循环之前读取第一行并存储它,或者可以使用counter/boolean字段来检查文件中的位置。

11

刚刚看过的第一线,什么也不做吧......

List<string> values = new List<string>(); 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    sr.ReadLine(); 
    while (sr.Peek() != -1) 
    { 
     string line = sr.ReadLine(); 
     List<string> lineValues = line.Split(',').ToList(); 

     //***// 
    } 
} 
3

事情是这样的:

bool isFirst=true; 
using (StreamReader sr = new StreamReader(filePath)) 
{ 
    while (sr.Peek() != -1) 
    { 
     if(isFirst) 
     { 
      isFirst=false; 
      continue; 
     } 
    } 
} 
相关问题