在C#中读取制表符分隔文本文件的最佳方法是什么?

时间:2010-01-26 22:41:55

标签: c# ado.net datatable etl

我们有一个大约100,000行的文本文件,每行大约50列,大部分数据都很小(5到10个字符或数字)。

这是一项非常简单的任务,但只是想知道将这些数据导入C#数据结构(例如DataTable)的最佳方法是什么?

6 个答案:

答案 0 :(得分:9)

我会将其作为带有制表符分隔符的CSV格式阅读:

A Fast CSV Reader

修改
以下是您需要的简单例子:

DataTable dt = new DataTable();
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) {
    dt.Load(csv);
}

CSV_FULLNAME是制表符分隔CSV的完整路径+文件名。

答案 1 :(得分:3)

使用.NET的内置文本解析器。它是免费的,具有很好的错误处理能力,可以处理很多奇怪的球案。

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(VS.80).aspx

答案 2 :(得分:1)

如果FileHelpers,您可以将选项卡定义为分隔符。通过提供的链接访问该网站,并有一个偷看。

希望这有帮助, 最好的祝福, 汤姆。

答案 3 :(得分:0)

两个选项:

  1. 使用System.Data.OleDb命名空间中的类。这样做的好处是可以直接读入数据表,就像你用非常少的代码一样,但要正确起来可能很棘手,因为它是制表符而不是逗号分隔符。
  2. 使用或编写csv解析器。确保它是一个基于状态机的解析器,就像链接到@Jay Riggs的解析器而不是基于String.Split()的解析器。这应该比OleDb方法更快,但它会给你一个List或数组,而不是数据表。

答案 4 :(得分:0)

但是,您解析这些行,请确保使用支持转发和倒带的内容,作为数据网格的数据源。您不想先将所有内容加载到内存中,对吗?如果下次数据量应该是十倍,怎么样?制作一些内容使用file.seek的东西,不要先读取内存中的所有内容。这是我的建议。

答案 5 :(得分:0)

简单,但不一定是一个很好的方式:

  • 使用文本阅读器将文件读入字符串

  • 使用String.Split获取行

  • 使用带有制表符的String.Split来获取字段值