关于 ado.net:在 C# 中读取制表符分隔的文本文件的最佳方法是什么

What's the best way to read a tab-delimited text file in C#

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

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


我会将其读取为带有制表符列分隔符的 CSV:

快速 CSV 阅读器

编辑:
这是您需要的一个准系统示例:

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

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


使用 .NET 的内置文本解析器。它是免费的,具有出色的错误处理能力,并且可以处理很多奇怪的问题。

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


FileHelpers 怎么样,您可以将制表符定义为分隔符。通过提供的链接前往该网站并进行偷窥。

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


简单,但不一定是好方法:

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

  • 使用 String.Split 获取行

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


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


两个选项:

  • 使用 System.Data.OleDb 命名空间中的类。这具有直接读取数据表的优势,就像您用很少的代码询问的那样,但是由于它是制表符而不是逗号分隔,因此正确处理可能会很棘手。
  • 使用或编写 csv 解析器。确保它是基于状态机的解析器,例如链接到的 @Jay Riggs,而不是基于 String.Split() 的解析器。这应该比 OleDb 方法更快,但它会给你一个列表或数组而不是数据表。