我正在阅读CSV文件并想逐行阅读。下面的代码没有任何错误,但是当执行从CSV中间读取的代码时,它只打印最后四行CSV但我需要整个CSV数据作为输出。请帮助我的代码中缺少的内容
我想只使用streamreader而不是解析器来实现这一点。
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
TEST Value,13:00 ,,, 14:00,15:00 ,,,“Location”,“Time1”,“Transaction1”,“Transaction2”,“Tim2”,“Pune”,“1.07 “,” - “,” - “,”0.99“,”孟买“,”0.55“,” - “,” - “,”0.59“,”德里“,”1.00“,” - “,” - “, “1.08”,“Chennai”,“0.52”,“ - ”,“ - ”,“0.50”,
答案 0 :(得分:0)
关于此问题已经有stack overflow article。
此外,本文提供了一种更好的方法:
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
}
}
}
答案 1 :(得分:0)
我相信你的CSV文件有问题,可能包含一些意想不到的字符。你可以尝试几件事:
您可以让StreamReader类检测CSV的正确编码
new StreamReader(@"C:\Test.csv", System.Text.Encoding.Default, true)
你可以force your StreamReader class to read your CSV from the beginning.
rd.DiscardBufferedData();
rd.BaseStream.Seek(0, SeekOrigin.Begin);
rd.BaseStream.Position = 0;
您可以尝试修复CSV文件,例如清除空字符和将Unix换行符转换为Windows换行符。