【问题标题】:How do you sequentially write to a csv in C++您如何在 C++ 中按顺序写入 csv
【发布时间】:2021-04-23 05:50:04
【问题描述】:

我只是想知道如何在 csv 中为我的 C++ 骰子游戏编写一个列表

这是我目前所拥有的:

void csv_export1(int score)
{
    ofstream my_file;
    my_file.open("score.csv");
    my_file << USERNAME << "," << score <<"\n" << endl;
}


void csv_read()
{
    fstream fin;
    fin.open("score.csv");
}

为什么要覆盖原来的乐谱? 非常感谢。

【问题讨论】:

  • 您可以通过设置附加标志来解决此问题,但我的建议是打开文件 1 次,而不是在每一行上重新打开。相关追加:https://stackoverflow.com/questions/2393345/how-to-append-text-to-a-text-file-in-c
  • 有时在你写完后重新阅读你的问题会有所帮助。在这种情况下,您从“如何编写”开始,但以“为什么要覆盖”结束。由于您已经展示了写入文件的能力,因此后者似乎是您真正的问题。所以开始吧。尝试类似 “我想知道为什么,当我写入 csv 文件时,我会覆盖原始数据而不是添加新行。”

标签: c++ csv export-to-csv


【解决方案1】:

默认情况下,打开一个文件进行输出会截断它,覆盖它的内容。 std::ostream::open 可以接受两个参数,后者可用于告诉它将数据附加到文件中,而不是这种默认行为。有关std::ios::outstd::ios::app 在以下示例中所做的更多详细信息,请参阅this page

因此,您的程序可能看起来更像这样:

void csv_export1(const int &score) {
    std::ofstream my_file;
    my_file.open("score.csv", std::ios::out | std::ios::app);
    my_file << "USERNAME" << "," << score << std::endl;
}

另一方面,正如在别处提到的那样,每次调用函数时打开文件的这种方法可能代价高昂。更有效的方法可能是在别处打开文件,然后通过引用将其传递给函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多