私は、行の先頭に*
というコメントを付けることによって入力ファイルからいくつかのパラメータ値を読み込む必要があります。 「有用な」行の値は次のようにセミコロンで区切られています。C++ - 出力ストリームの行の先頭にある文字を別のものに置き換える
10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
と私は私の入力ファイル内でこのように複数のラインを持っています。
*
を各行の先頭に挿入すると、2回目にファイルを読むと次の行をスキップして次の行に直接進みます1。
私の目的は、自分のプログラムの複数のインスタンスを同時に実行し、必要な入力パラメータを得るためにファイルに順番にアクセスすることです。だから私は、それぞれのインスタンスが異なるパラメータを取得したい。
私は何を考えてこのように、各行の先頭にダミーの文字を挿入します*
と、その後
b10; 32541615; 0.18; 0.45; 0.00015; 0.01485; 0.03;
とそれを置き換える(この例ではb
)ように私はそれを読んで2回目に私はその行を読むとコメントとして扱われます。
私はpeek()
コールでb
を読んでたらput('*')
と<< '*'
を使用しようとしたが、*
文字は常にファイルの末尾に追加されます。私はそれを読んだが、私はファイルの途中で上書きすることはできないが、ファイルの途中に書き込むことはできない。私に何ができる?ここで
が可能な入力ファイルの例です:
* 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;
あなたのインスタンスプログラムがどのパラメータを使用しているかを知る必要はありませんか?私は、それぞれのインスタンスに対して1つのパラメータファイルを使用し、コマンドライン引数としてファイル名を渡すことができます。または、単一のファイルを主張する場合は、ファイル内の指定された行から各インスタンスにパラメータを読み込ませます(コマンドラインの引数として渡します)。 Imhoはあなたのプログラムのいくつかのインスタンスを同じファイルに読み書きするだけで、不必要なオーバーコンプリートになります。 – user463035818
基本的な問題は、いくつかの追加の同期がなければ、プログラムの複数のインスタンスが同じ行を読み込む競合状態を防ぐことができないことですそれらのいずれかが回線を更新するための変更を取得します。あなたがその問題を解決したときには、元の問題をよりクリーンな方法で解決できるという追加の利点があります。 –
@MichaelBurr私はそれを知っています。もちろん、一度に同じファイルから複数のスレッドを読み取る前に、ある種の同期を実装するつもりです。しかし、私はこの問題に単純な答えがあるかどうか知りたいと思っていました – jackscorrow