C++:如何将数据作为 CSV 输出到现有文件中的一组特定单元格?

标签 c++ csv ofstream

所以我循环遍历数据文件,以便根据每个数据文件进行计算(计算是针对每个文件中的 20 个 bin 完成的,因此每个文件有 20 个结果)。然后我想将每个计算结果放入一个 csv 文件中,以便我能够对每个文件的计算结果进行平均。

每次我循环访问一个文件时,我都会在单元格 A1 到 A20 中获得一个包含 20 个结果的 csv 文件。

但是,我想要的是一个 csv 文件,在单元格 A1 到 A20 中有 20 个结果,在单元格 B1 到 B20 中有另外 20 个结果,等等。在单元格 CV1 到 CV20 中最多有 20 个结果。

我在每个循环中用于输出数据的代码如下所示:

ofstream ofs (path2 + "tanShears.csv", ofstream::out);
for (int j = 0; j < r.size(); j++) {
    ofs << tShears[j] << endl;

显然,当我这样做时,我最终在单元格 A1 到 A20 中得到了 20 个结果,对应于循环中的最终数据集,因为每个循环都只是覆盖前一个循环。

我有什么想法可以定位 csv 文件中的特定单元格,以便我可以将每个循环的结果输出到同一 csv 文件的不同部分吗?

最佳答案

CSV 文件的结构如下:

[A1];[B1];[C1];...\n
[A2];[B2];...\n
[A3];[B3];...\n

如果你不想一次写入整个数据,你将不得不读取整个文件,解析它,进行相应的更改,然后再写入。我几乎会不惜一切代价避免这种情况。

现在来看一些示例代码:(我假设您正在打印一些 int 值)

void writeToCSV(std::vector<std::vector<int>> const& tShears)
{
    ofstream ofs (path2 + "tanShears.csv", ofstream::out);
    for (std::vector<std::vector<int>>::iterator j = tShears.begin(); 
         j != tShears.end(); j++) 
    {
        for(std::vector<int>::iterator i = j->begin(); i < j->end(); j++)
        {
            ofs << i << ";";
        }
        ofs << std::endl;
    }
    ofs.close();
}

在此示例中,内部 vector 包含您进行的所有计算的第 n 个值。所以它可能包含 A1, B1, C1...

关于C++:如何将数据作为 CSV 输出到现有文件中的一组特定单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42554043/

相关文章:

c++ - vector 中的不可复制元素

c++ - 如果使用 QApplication,qApp->exec() 是否有效

csv - 使用executescript处理器更新csv值在apache-nifi中使用groovy失败

javascript - 如何将带有日期的 JSON 文件加载到 Google Charts

c++ - 如何在一次操作中从/向文件读取/写入固定数量的整数(尽可能快,文件可以假定为二进制)?

c++ - Linux 上的 C++ 在一行上打印 5000 个 float 时换行

c++ - 为什么我在这里需要构造函数和赋值运算符?

c++ - 如何确定 std::type_index 是否对我的编译器是唯一的?

csv - 使用 try 宏处理运行时 panic

c++ - 是否有(更)合理的方法来确定 ostream 所针对的终端的宽度?