在c#中逐行读取CSV

时间:2014-06-18 17:53:43

标签: c# csv

我正在阅读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”,

2 个答案:

答案 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换行符。