【问题标题】:How do I go back to end of the first line in csv file?如何返回到 csv 文件中第一行的末尾?
【发布时间】:2011-03-23 15:29:57
【问题描述】:

我正在使用 ofstream 来编写一个 csv 文件。 目前,我正在使用“

Shape,Area,Min,Max
Square,10,2,11
Rectangle,20,3,12

我想改变它的样子

Shape,Square,Rectangle
Area,10,20
Min,2,3
Max,11,12

我知道我可以使用“

所以我正在寻找一种按顺序写的方法,例如

Shape,
Area,
Min,
Max,

然后变成

Shape,Square
Area,10
Min,2
Max,1

所以它基本上是从上到下而不是从左到右。 如何使用 ofstream 进行编码?我猜我必须使用 seekp,但我不确定如何。 非常感谢。

【问题讨论】:

  • 不确定您的“不可能”断言。如果您可以包含一些代码,这将有助于形成响应。
  • 这似乎是写出文件的一种非常低效的方式,它将有缓冲区或磁盘,搅动、调整大小和洗牌数据。您可能需要重新考虑您的方法并更改您的循环。
  • 使用流(或文件)真的很难。您需要在代码中构建一个内部结构,以便您可以按需要的顺序序列化数据。
  • 我意识到它效率低下,但为了快速解决问题,以及我学习如何在文件中移动位置的知识,我想知道。不可能的原因是因为现在代码的方式是使用 for 循环迭代一个正方形,并在正方形内进行另一次迭代以使用正方形内的不同感兴趣区域找到面积、最小值和最大值,我需要找出所有感兴趣区域的最小值、最大值和面积。

标签: c++ csv ofstream


【解决方案1】:

除了在 ostream 的末尾之外,您不能插入 覆盖已经写入的数据。对于类似的东西 你正在尝试做,你可能必须收集每一行 单独的字符串(可能使用 ostringstream 来编写),然后 输出行。比如:

std::ostringstream label;
label << "Shape";
std::ostringstream area;
area << "Area";
std::ostringstream min;
min << "Min";
std::ostringstream max;
max << "Max";
for (std::vector<Shape>::const_iterator> it = shapes.begin();
        it != shapese.end();
        ++ it)
{
    label << ',' << it->TypeName();
    area << ',' << it->Area();
    min << ',' << it->min();
    max << ',' << it->max();
}
dest << label.str() << '\n';
dest << area.str() << '\n';
dest << min.str() << '\n';
dest << max.str() << '\n';

【讨论】:

    【解决方案2】:

    您可以根据需要使用旧的FILE* API、seeking。 IOStreams 还允许您使用seekpseekg。但是像这样操作文件会很困难。如果您在开头写出 100 个字节 seekp 并开始写入更多数据,您将覆盖已经存在的内容(它不会自动为您移动)。您可能需要读入文件的内容,在内存中对其进行操作,然后一次性将它们写入磁盘。

    【讨论】:

    • 旧的 FILE* API 也有同样的问题:你可以随心所欲地寻找内容,你可以覆盖现有数据,但你不能插入。
    • 确实如此。我没有说清楚。我的观点只是 FILE* API 和 IOStreams API 支持搜索。
    【解决方案3】:

    尽管效率低下,但可以通过写固定大小的行(40 个字符?)和额外的空格来完成,因此您可以通过查找 line*40+position(或查找逗号)并覆盖空格。

    既然你已经掌握了这方面的知识,那就按照 Martin 提到的方法去做

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-12
      • 2011-04-12
      • 1970-01-01
      • 2015-07-22
      • 2017-01-07
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多