我需要做的是从输入文件中读取一些参数值,其中在该行的开头加上*
来标识注释。在“有用”行值由分号像这样分离:C++ - 在输出流的行首替换一个字符与另一个字符
10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
我有多行这样在我的输入文件。
我想要做的就是在每行的开头插入一个*
,一旦我读了它,如果我第二次读该文件,我将跳过该行并直接转到以下内容一。
我需要这个,因为我的目标是让我的程序的多个实例同时运行并按顺序访问文件以获取所需的输入参数。所以我希望每个实例都会得到不同的参数。
我想到了就去做每一行的开头插入一个虚拟人物,像这样:
b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
,然后(在这个例子中b
)替换它与*
当我读到它,以便我第二次读到这条线就会被当作评论。
我试图用put('*')
和<< '*'
一次我和一个peek()
调用read 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;
你不需要知道你的程序实例使用什么参数?我可能会为每个实例使用一个参数文件,并将该文件名作为命令行参数传递。或者,如果您坚持使用单个文件,那么我会让每个实例从文件中的给定行读取其参数(再次作为命令行参数传递)。 Imho有几个程序读取和写入同一文件的实例只是不必要的过度复杂 – user463035818
一个基本问题是,如果没有一些额外的同步,您将无法防止多个程序实例读取同一行之前的竞争条件他们中的任何人都会更新以更新该行。如果/当你解决了这个问题,那么你就可以以更简洁的方式解决你原来的问题。 –
@MichaelBurr我知道。当然,我将在实际上有多个线程同时从同一个文件读取之前实现某种同步。但我很想知道这个问题是否有一个简单的答案 – jackscorrow