私はクラスのプロジェクトを与えられましたが、その一部で立ち往生しています。プロジェクトには次のテーブルがあります。
この情報をシーケンシャル ファイルに作成して C++ プログラムに読み込むにはどうすればよいですか? これは 3 次元配列のように見えます。私はこれを深く調べすぎていますか?
それはあなたが何をしようとしているのかによります。通常、それを読み込もうとしているだけの場合は、フラットファイルとして保存できます。フラットファイルでは、通常、固定長レコードまたはカンマ区切りの2つの一般的な形式があります(実装できるフラットファイル形式は他にもありますが、これらは2つの一般的な形式です)。
固定長レコードでは、各レコードは固定長であり、各フィールドは固定長です。例えば
Turkey 1.00Swiss .30Roll .30Condiments .10
Pastrami 1.30Swiss .40Roll .30Condiments .10
カンマ区切りの言語では、このトルコ、1.00、スイス、.30、ロール、.30、調味料、.10のように行うことができます
固定長のレコードでは、一度指定すると、ファイルの受信者によっては、フィールドが大きくなることはありません。たとえば、価格フィールドが5スペースの場合、最大値は99.99になり、他のアプリケーションが5文字であることに依存していると互換性がなくなるため、フィールドサイズを増やすのに苦労します。区切り文字はカンマであるため、カンマ区切りはもう少し柔軟性があります。カンマ区切りを使用すると、カンマが区切り文字であるため、通常、フィールドのサイズを大きくすることができます。
別のオプションがあり、それは私が例としてドメイン固有フォーマットと呼ぶもののiniタイプを作成することです以下を見てください
Sandwich: Turkey
Deli Slice: Turkey,1.00
Deli Slice: Swiss,.30
Bread: Roll,.30
Condiments: .30
Sandwich: Pastrami
Deli Slice: Pastrami,1.00
Deli Slice: Swiss,.40
Bread: Roll,.30
Condiments: .10
この形式は、フィールドを追加できるため、より柔軟です。たとえば、カリフォルニアと呼ばれる新しいサンドイッチがあり、ミートチーズとアボカドが必要だったとします。このように拡張できます
Sandwich: California
Deli Slice: Turkey, 1.00
Deli Slice: American, .30
Deli Slice: Avocado, .50
Bread: Roll,.30
Condiments: .10
この3番目の形式といくつかの注意深いプログラミングにより、新しいサンドイッチは自動的に下位互換性があります。
各ファイルは、それを読み込むために異なる戦略を取ります。解析と呼ばれるものがあり、各ファイルは異なるアプローチを持ちます。固定長のレコードでは、各列を文字の位置で読み取るというアプローチはありません。カンマ区切りのファイルでは、C ++で読み込まれた各行をトークン化する必要がありますが、strtokがありますが、マネージC ++ .netを使用する場合は、string.splitがあると思います。3番目のオプションでは、実際に「サンドイッチ」、「デリスライス」などのキーワードを探します。次に、テーマをトークン化する必要があります。
使用する可能性のあるすべての種類の規則があります。例えば、
Turkey
Turkey, 1.00
Swiss, 0.30
Roll, 0.30
Condiments, 0.10
Pastrami
Pastrami, 1.30
Swiss, .40
...
このフォーマットは読みやすいです: 行のテーブル ヘッダー、コンマで区切られた成分/価格のペア、そして空白行。その後、最初からやり直します。
あなたが について知っているかどうかはわかりませんHashMaps
。そうでない場合は、調べることができます。それを使用するのは非常に簡単です。
とを持つものを 1 つmap
持つことができます。「七面鳥」、「パストラミ」、「ハム」、「スペシャル」の 4 つのキーがあり、それらに として関連付けられた値を持つことができます。key = String
value = Integer
1,2,3,4
次に、他の4つmaps
をそれぞれ持ちkey = String
、Value = float
上記のデータを入力できます。最初のマップを使用して適切な列を確認し、他のマップを使用してコストを取得できます。
もちろん、上記を使用して実装することもできますが、2D - arrays
学ぶには良い経験になるでしょう。幸運を!!