【发布时间】:2021-07-28 08:44:30
【问题描述】:
我有一个大的 CSV 文件 (200 MB)
ID,Item,Description
1,TV,"Excellent condition, no marks, and brand new"
2,PC, "Used, missing keyboard"
....
我需要将其放入数据表中,以便在我的 C# Windows 窗体应用程序中构建 TreeView 和 GridView。
我找到了很多这样做的例子..
一种方法是使用 System.IO
using System.IO.File;
return ReadAllLines(@"C:\MyFile.csv").Select(line => line.Split(',')).ToList();
另一种方法是使用 GenericParsing
var adapter = new GenericParsing.GenericParserAdapter(path);
DataTable dt = adapter.GetDataTable();
方法1有一个问题是它用分隔符“,”分割列
这是一个问题,因为在我的文件中,逗号可以作为字符出现在同一列中,而不是作为分隔符
第二种方法需要高内存并且由于这个错误而失败
此异常最初是在此调用堆栈中引发的: [外部代码] FrmCoder.cs 中的 Encoder.FrmCoder.GetDataTableFromCsv(string, bool) FrmCoder.cs 中的 Encoder.FrmCoder.FrmCoder_Load(object, System.EventArgs) [外部代码]
任何其他方法可以轻松加载大文件而不会出现问题?
【问题讨论】:
-
我从未使用过 GenericParsing,但如果用于读取 CSV 文件的库无法处理出现在引用单元格值中的分隔符,我会感到惊讶。也许您应该尝试使用更常用的 CsvHeper.io。
-
不要自己尝试这样做。使用 CSVHelper。 CSV 文件有很多你不会想到的极端情况。
-
@Andy 有什么关于如何使用 CsvHlper 的好例子吗?
-
非常easy to use。
-
这里有 数千个 CSVHelper 示例...有些相当广泛...但是它易于使用和学习