使用streamreader读取csv时如何跳过第一行
Posted
技术标签:
【中文标题】使用streamreader读取csv时如何跳过第一行【英文标题】:How to skip first line while reading csv using streamreader 【发布时间】:2012-02-23 23:30:45 【问题描述】:我有以下代码从 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
【问题讨论】:
【参考方案1】:在进入循环之前先阅读它。我会这样做:
using (StreamReader sr = new StreamReader(filePath))
string headerLine = sr.ReadLine();
string line;
while ((line = sr.ReadLine()) != null)
...
(我个人不喜欢使用 Peek。)
然后当你写出输出时,以headerLine
开头。
【讨论】:
【参考方案2】:只读第一行,什么也不做……
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;
【讨论】:
【参考方案4】:我建议,使用技术来处理这种情况,
int row = 0;
using (StreamReader sr = new StreamReader(filePath))
While(reader.Read()) //Each row of the file
row++;
if(row==1)
continue;
... code..
【讨论】:
【参考方案5】:您可以在 while 循环之前读取第一行并将其存储,或者您可以使用计数器/布尔字段来检查您在文件中的位置。
【讨论】:
以上是关于使用streamreader读取csv时如何跳过第一行的主要内容,如果未能解决你的问题,请参考以下文章