【问题标题】:How to write to a column in a CSV file如何写入 CSV 文件中的列
【发布时间】:2018-07-29 03:29:05
【问题描述】:

我目前从 CSV 文件中提取数据。 CSV 文件有大约 89 列和 2000 行的数据。我使用各种 getlines 和循环获得了几个特定的​​数据列,例如 col:1,2,21,22,66,67 的所有列。然后我将该数据存储到循环内的向量中。一旦我通读了整个文件,我现在就有了 6 个充满我想要的数据的向量。我对该数据进行了一些调整并将其存储回向量中。我现在想将这些新数据放回我从中取出的那些列中,而无需实际拾取/取出我不想要的其他数据。最好的方法是什么?由于我不想制作 89 个变量来保存所有其他数据,因此我更愿意在这些列上特别写或类似的东西。

【问题讨论】:

  • 一次从一个文件读取一行并输出到另一个文件。您无法实际“编辑”文件,因此将每一行读入内存,更改值并输出到不同的文件。
  • 我想过,但这似乎是一种非常低效的方法,还是我错了?
  • 对文本文件执行随机访问非常困难,而且对于像数据集这样的小数据大小,效率并不是真正的问题。
  • 我使用的实际数据集要大得多。约 89 列和 500k 行,并且可以更多。我只是将其减少了一点以使其更易于管理。
  • @Steven:从实际角度来看,你有两个选择:要么读取旧文件,修改所需数据,然后写入包含修改和未修改数据的全新文件,要么切换到完全是其他一些文件格式(例如,一种真正旨在支持单独修改零碎的数据库格式)。

标签: c++ csv large-data


【解决方案1】:

由于我不想创建 89 个变量来保存所有其他数据,因此我更愿意在这些列上特别写或类似的东西。

您可以使用一个字符串向量来保存一行中的数据,而不是使用 6 个向量来存储列数据。然后更新该向量中 1,2,21,22,66,67 处的元素并将其写入另一个文件。

std::vector<std::string> row; // 89 elements after read and parse a row.

以这种方式处理 500,000 行应该足够快。如果不是,请尝试面向列的数据库,例如OpenTSDB

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多