【问题标题】:Read large CSV, replace some column values from oracle db and write new csv读取大型 CSV,从 oracle db 中替换一些列值并写入新的 csv
【发布时间】:2016-02-23 16:40:10
【问题描述】:

我有不同结构的大型 csv 文件(从 2GB 到 25GB)。我制作了一个 c# 应用程序,用户可以在其中输入他想要替换的列的位置。现在我必须读取 csv,将 csv 中的列与存储在 oracle db 表中的列进行比较,如果满足选择条件,则替换 csv 中的列,并将结果存储在新的 csv 中。

现在的问题是:最好和最快的方法是什么?仅访问一次数据库以执行选择语句以进行列比较而不是每个 csv 行的最佳方法是什么?

现在我使用 StreamReader 读取然后拆分 csv 行,但我不知道将其与 db 中的值进行比较的最佳方法是什么?

感谢您的建议。

【问题讨论】:

    标签: c# oracle parsing csv


    【解决方案1】:

    StreamReader 是一种简单的方法,但也可能不是那么快。

    如果您能够在不遍历所有行的情况下检测到行号,您可以尝试使用 MemoryMappedFiles(如果它们支持查找,也可以与流一起使用)

    然后跳到文件的中间并检查您是否在所需行的上方或下方。 然后跳到剩余一半的中间(如果命中值低于则上/如果命中值高于则低于)并重复。

    即使在相当大的文件上,这也需要几次迭代。

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 1970-01-01
      • 2013-10-04
      • 2019-10-05
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多