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

Fer*_*dez 2 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();
}
Run Code Online (Sandbox Code Playgroud)

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

Vig*_*r A 20

方法1

使用LINQ:

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

方法2

正如Jay Riggs在这里所说

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

适用于平面文件的便携式高效通用解析器

它易于配置且易于使用.我劝你看看.

方法3

滚动自己的CSV读者是在浪费时间,除非你正在阅读的文件是保证非常简单的.请使用预先存在的,经过实践检验的实施.

  • 第一个操作是`File.ReadAllLines`,它在使用linq之前将整个文件内容拉入内存. (6认同)

Dmi*_*nko 7

在简单情况下(也就是没有报价,即'"'在文件中),当您希望部分的阅读,你会发现有用

  var source = File
    .ReadLines(fileName)
    .Select(line => line.Split(';'));
Run Code Online (Sandbox Code Playgroud)

例如,如果您要查找CSV中是否有一行,则3d列值等于0

  var result = source
    .Any(items => items[2] == "0");
Run Code Online (Sandbox Code Playgroud)