【问题标题】:c# CSVHelper read CSV with variable headersc# CSVHelper 读取带有可变标头的 CSV
【发布时间】:2015-03-15 16:45:25
【问题描述】:

第一次使用 csvReader - 请注意,它需要一个自定义类来定义 CSV 文件中的标头。

class DataRecord
{
    //Should have properties which correspond to the Column Names in the file 
    public String Amount { get; set; }
    public String InvoiceDate { get; set; }......
}

然后给出的示例使用这样的类:-

            using (var sr = new StreamReader(@"C:\\Data\\Invoices.csv"))
        {
            var reader = new CsvReader(sr);

            //CSVReader will now read the whole file into an enumerable
            IEnumerable<DataRecord> records = reader.GetRecords<DataRecord>();

            //First 5 records in CSV file will be printed to the Output Window
            foreach (DataRecord record in records.Take(5)) 
            {
                Debug.Print("{0} {1}, {2}", record.Amount, record.InvoiceDate, ....);
            }

两个问题:- 1. 该应用程序将加载具有不同标题的文件,因此我需要能够即时更新此类 - 这可能吗?如何? (我可以从 CSV 文件中提取标题。)

  1. CSV 文件可能有数百万行(gb 大小),因此这是导入文件的最佳/最有效方式。

目标是一个 SQLite DB - 以调试行为例。

谢谢

【问题讨论】:

  • 我使用 linq2csv 取得了巨大的成功。不确定它如何扩展到 GB 的数据。最好把它分成块。codeproject.com/Articles/25133/LINQ-to-CSV-library
  • 它也允许您动态定义标题,这很好。
  • 看起来不错,像文档一样 - 感谢您突出显示,因为我没有看到这个选项。

标签: c# winforms csv csvhelper


【解决方案1】:
  1. 应用程序将加载具有不同标题的文件,因此我需要能够即时更新此类 - 这可能吗?如何?

虽然使用反射或第三方库绝对有可能,但对于如此大的文件,为一行创建一个对象将是低效的。此外,在这种情况下使用 C# 是一个坏主意(除非您有一些业务数据转换)。我会考虑this 之类的东西,或者可能是 SSIS 包。

【讨论】:

  • 把它归结为 IT 文盲最终用户 :( 我必须导入大型金融数据集,针对数据执行统计例程/数据聚合/关键字搜索等,然后生成报告。尝试过各种方法,但厌倦了手持,尽管以应用程序形式制作它有望使它成为用户证明(如果我能正确编码!!)
  • 您可以使用 OleDbConnection “连接”到 csv 文件,然后使用常规 SQL 语句对其进行查询。见this answer。我希望它会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多