3

私はクラスのプロジェクトを与えられましたが、その一部で立ち往生しています。プロジェクトには次のテーブルがあります。

ここに画像の説明を入力

この情報をシーケンシャル ファイルに作成して C++ プログラムに読み込むにはどうすればよいですか? これは 3 次元配列のように見えます。私はこれを深く調べすぎていますか?

4

3 に答える 3

1

それはあなたが何をしようとしているのかによります。通常、それを読み込もうとしているだけの場合は、フラットファイルとして保存できます。フラットファイルでは、通常、固定長レコードまたはカンマ区切りの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番目のオプションでは、実際に「サンドイッチ」、「デリスライス」などのキーワードを探します。次に、テーマをトークン化する必要があります。

于 2012-04-26T05:19:58.803 に答える
0

使用する可能性のあるすべての種類の規則があります。例えば、

Turkey
Turkey, 1.00
Swiss,  0.30
Roll,   0.30
Condiments, 0.10

Pastrami
Pastrami, 1.30
Swiss,     .40
...

このフォーマットは読みやすいです: 行のテーブル ヘッダー、コンマで区切られた成分/価格のペア、そして空白行。その後、最初からやり直します。

于 2012-04-26T04:53:46.740 に答える
0

あなたが について知っているかどうかはわかりませんHashMaps。そうでない場合は、調べることができます。それを使用するのは非常に簡単です。

とを持つものを 1 つmap持つことができます。「七面鳥」、「パストラミ」、「ハム」、「スペシャル」の 4 つのキーがあり、それらに として関連付けられた値を持つことができます。key = Stringvalue = Integer1,2,3,4

次に、他の4つmapsをそれぞれ持ちkey = StringValue = float上記のデータを入力できます。最初のマップを使用して適切な列を確認し、他のマップを使用してコストを取得できます。

もちろん、上記を使用して実装することもできますが、2D - arrays学ぶには良い経験になるでしょう。幸運を!!

于 2012-04-26T05:04:07.213 に答える