c ++ - 将输出流中行首的一个字符替换为另一个字符

c++ - Replacing one character at beginning of line in output stream with another one

我需要做的是从一个输入文件中读取一些参数值,在该文件中,通过在行首放置 * 来标识注释。 "useful" 行中的值由分号分隔,如下所示:

10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;

我的输入文件中有多行这样的内容。

我想做的是在每行的开头插入一个*,一旦我以这种方式阅读它,如果我第二次阅读该文件,我将跳过该行并且直接进入下一个

我需要这个,因为我的 objective 是同时拥有我的程序 运行 的多个实例,并按顺序访问文件以获得它们需要的输入参数。所以我希望每个实例都会得到不同的参数。

我想做的是在每一行的开头插入一个虚拟字符,如下所示:

b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;

然后在我阅读它时用 * 替换它(本例中的 b),以便我第二次阅读该行时它会被视为注释。

我尝试使用 put('*')<< '*' 一旦我通过 peek() 调用读取 b* 字符总是附加在末尾的文件。我读过,虽然我不能在文件中间写入,但我可以在文件中间覆盖。我能做什么?

这是一个可能的输入文件示例:

* FORMAT:
* MAX_HEIGHT; SEED; p0; p1; pd; pp; epsilon;

b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
b40; 32541615; 0.18; 0; 0.00015; 0.01485; 0.03;

所以你想修改你正在阅读的文件?然后你基本上必须从头开始重写它。

一种常见的方法是将整个文件读入内存,修改内存缓冲区,然后用(修改后的)内存缓冲区覆盖文件。

另一种常见的方法,如果文件太大而无法放入内存,则逐行读取,修改行,然后将其写入新的临时文件。然后当所有输入都被读取后,您将临时文件重命名为实际文件,从而替换其中的数据。

这两种解决方案都可以使用,而无需任何特殊标记字符,例如要替换行开头的 b