在c#中逐行读取CSV
本文关键字:读取 CSV 逐行 | 更新日期: 2023-09-27 18:09:07
我正在阅读CSV文件,并希望逐行读取。下面的代码没有任何错误,但是当执行代码时,它从CSV的中间读取,它只是打印CSV的最后四行,但我需要整个CSV数据作为输出。请帮助我在我的代码中缺少什么
我想只使用流阅读器而不是解析器来实现这一点。
using (StreamReader rd = new StreamReader(@"C:'Test.csv"))
{
while (!rd.EndOfStream)
{
String[] value = null;
string splits = rd.ReadLine();
value = splits.Split(',');
foreach (var test in value)
{
Console.WriteLine(test);
}
}
}
Test.csv
测试值,13:00……下午15:00…"位置","Time1"、"中为Transaction1"、"Transaction2","Tim2"、"普"、"1.07 ","-","-"," 孟买"、"0.99"、"0.55 ","-","-"," 1.00"、"0.59"、"德里 ","-","-"," 1.08"、"奈"、"0.52 ","-","-"," 0.50",
已经有一篇关于堆栈溢出的文章。
此外,本文还提供了一种更好的方法:
using (TextFieldParser parser = new TextFieldParser(@"c:'test.csv"))
{
parser.TextFieldType = FieldType.Delimited;
parser.SetDelimiters(",");
while (!parser.EndOfData)
{
//Processing row
string[] fields = parser.ReadFields();
foreach (string field in fields)
{
//TODO: Process field
}
}
}
我相信你的CSV文件有问题,它可能包含一些意想不到的字符。有几件事你可以试试:
你可以让StreamReader类检测你的CSV的正确编码
new StreamReader(@"C:'Test.csv", System.Text.Encoding.Default, true)
你可以强制你的StreamReader类从头开始读取你的CSV。
rd.DiscardBufferedData();
rd.BaseStream.Seek(0, SeekOrigin.Begin);
rd.BaseStream.Position = 0;
您可以尝试修复您的CSV文件,如清理空字符和转换Unix换行符到Windows换行符。