在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",

在c#中逐行读取CSV

已经有一篇关于堆栈溢出的文章。

此外,本文还提供了一种更好的方法:

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