2017-09-18 6 views
2

私は、例えば次のようになり、configファイル与えられています:このファイルを読み込んで後で操作する最も良い方法は?

Start Simulator Configuration File 
Version/Phase: 2.0 
File Path: Test_2e.mdf 
CPU Scheduling Code: SJF 
Processor cycle time (msec): 10 
Monitor display time (msec): 20 
Hard drive cycle time (msec): 15 
Printer cycle time (msec): 25 
Keyboard cycle time (msec): 50 
Mouse cycle time (msec): 10 
Speaker cycle time (msec): 15 
Log: Log to Both 
Log File Path: logfile_1.lgf 
End Simulator Configuration File 

をIは、ログおよび/またはモニターに、サイクルとサイクル時間、このファイル、および出力を取ることができるようになっています。私は、これらの各サイクルが何回実行されたのか、それから合計時間を計算して記録することになっているかを教えてくれるメタデータファイルからデータを引き出すことになっています。例えば、5つのハードドライブサイクルは75msecである。設定ファイルとメタデータファイルの順序は任意です。

私は各項目を配列に入れて、文字列が一致するとtrueを待つことを繰り返します(ファイルエラーの検出にも役立ちます)。設定ファイルは、異なる順序でも常に同じサイズでなければなりません。メタデータファイルはどのようなサイズでも構いませんので、私は同様のことをベクトルで行います。 次に、設定ファイルのサイクル時間に、一致するメタデータファイル文字列のサイクル数を掛けます。私はベクトルからデータを読み取る最善の方法はキューにあると思う。

これはいい考えですか? 私はほとんどの概念を理解しています。しかし、私のデータ構造は実際にそれをコーディングするという点では不安定です。たとえば、ファイルから読み込むときに、行単位で読み込むか、後で計算するために文字列からintを分離するのが最善でしょうか?私は前に変更できるファイルからこれを行う必要はなかった。 私はそれらを分けると、別々の配列/ベクトルを使わなければなりませんか? Cを使用して

イム++ところで

答えて

1

あなたのロジックは次のようになります。

  1. 2つのstd::map変数、文字列に文字列をマップ1、フロートに文字列をマップする別を作成します。
  2. ラインが:が含まれている場合は、ファイル
  3. の各行を読んで、それから、二つの部分に文字列を分割:

    3A。パートAは、0から始まり、1を引いた線で、:

    3bです。パートBは、1から始まる行の一部です+ :

  4. これらの2つの部分を値の種類に基づいてカスタムstd::mapの種類に格納します。

これで、ファイルが正しく読み込まれました。メタファイルを読むときは、メタデータファイル内のキーを検索し、設定ファイルのデータ内の対応するキーを参照して(値を取得するために)使用し、必要な数学演算を実行します。

+0

ありがとうございます。私はそれを使ったことがないので、地図を調べます。しかし、より簡単なソリューションのように思えます、ありがとう! – Penrose5833

関連する問題