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
。
我需要做的是从一个输入文件中读取一些参数值,在该文件中,通过在行首放置 *
来标识注释。 "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
。