有效地读取c#中的.csv文件?

时间:2016-02-16 16:03:36

标签: c# csv streamreader

我正在使用这种方式阅读巨大的csv文件(按文件大约350K行):

StreamReader readFile = new StreamReader(fi);
    string line;
    string[] row;
    readFile.ReadLine();
    while ((line = readFile.ReadLine()) != null)
    {
        row = line.Split(';');
        x=row[1];
        y=row[2];
        //More code and assignations here...
    }
    readFile.Close();
}

这里的要点是逐月读取一个巨大的文件可能会很慢,我认为必须采用另一种方法来更快地完成它。

2 个答案:

答案 0 :(得分:19)

方法1

使用LINQ:

var Lines = File.ReadLines("FilePath").Select(a => a.Split(';'));
var CSV = from line in Lines 
          select (line.Split(',')).ToArray();

方法2

正如Jay Riggs所述

这是一个优秀的类,它将使用数据结构将CSV数据复制到数据表中以创建DataTable:

A portable and efficient generic parser for flat files

配置简单,易于使用。我劝你看看。

方法3

滚动您自己的CSV阅读器是浪费时间,除非您正在阅读的文件保证 非常简单。请改用pre-existing, tried-and-tested implementation

答案 1 :(得分:5)

在一个简单的情况下(文件中没有引用,即'"')当你期望部分阅读时,你可能会觉得有用

  var source = File
    .ReadLines(fileName)
    .Select(line => line.Split(';'));

例如,如果您想知道CSV中是否有一行,使得3d列值等于0

  var result = source
    .Any(items => items[2] == "0");