有效地读取 c# 中的 .csv 文件?
Read a .csv file in c# efficiently?
我正在使用这种方式读取巨大的 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();
}
这里的重点是,一个月中的每一天逐行读取一个巨大的文件可能会很慢,我认为这一定是另一种更快的方法。
方法一
通过使用 LINQ:
var Lines = File.ReadLines("FilePath").Select(a => a.Split(';'));
var CSV = from line in Lines
select (line.Split(',')).ToArray();
方法二
如Jay Riggs 所述
这是一个很棒的 class,它将使用数据结构将 CSV 数据复制到数据表中以创建数据表:
A portable and efficient generic parser for flat files
配置简单,使用方便。我劝你看看。
方法三
滚动你自己的 CSV reader 是浪费时间,除非你正在阅读的文件 保证 非常[=40] =] 简单。请改用 pre-existing, tried-and-tested implementation。
在一个简单的情况下(文件中没有 引号,即 '"'
),当您期望 partial阅读,你可能会发现有用
var source = File
.ReadLines(fileName)
.Select(line => line.Split(';'));
例如,如果您想找出 CSV 中是否有一行 3d 列值等于 0
:
var result = source
.Any(items => items[2] == "0");
我正在使用这种方式读取巨大的 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();
}
这里的重点是,一个月中的每一天逐行读取一个巨大的文件可能会很慢,我认为这一定是另一种更快的方法。
方法一
通过使用 LINQ:
var Lines = File.ReadLines("FilePath").Select(a => a.Split(';'));
var CSV = from line in Lines
select (line.Split(',')).ToArray();
方法二
如Jay Riggs 所述
这是一个很棒的 class,它将使用数据结构将 CSV 数据复制到数据表中以创建数据表:
A portable and efficient generic parser for flat files
配置简单,使用方便。我劝你看看。
方法三
滚动你自己的 CSV reader 是浪费时间,除非你正在阅读的文件 保证 非常[=40] =] 简单。请改用 pre-existing, tried-and-tested implementation。
在一个简单的情况下(文件中没有 引号,即 '"'
),当您期望 partial阅读,你可能会发现有用
var source = File
.ReadLines(fileName)
.Select(line => line.Split(';'));
例如,如果您想找出 CSV 中是否有一行 3d 列值等于 0
:
var result = source
.Any(items => items[2] == "0");