2010-12-03 9 views
-1

これは1週間ほど前に質問しました。私は何か言及するのを忘れていたので、以前に言われたことは私を多くの問題に導いた。テキストファイルを解析し、ソングクラスの新しいインスタンスを作成し、ベクトルに曲を追加します。<Song*>

問題は、私はすべてのように見えるの行の数百含まれているテキストファイル持っていることです:| SONG_TITLE |

song_number song_release_dateを|| これを無視してください | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0

数字は曲の種類を表します。 1の場合は特定のジャンルを表し、0の場合はそのジャンルのタイプを表しません。例えば、(0)のジャンルは、すべての曲について同じであり、残りのジャンルと同じである。

今、私がされて、これらのパラメータを持っている曲クラスの新しいインスタンスを作成する必要があります。

(int型song_number、文字列のタイトル、文字列RELEASE_DATE、ベクトルジャンル)

私は、テキストファイルを解析したいです1つの関数では、その関数はソングクラスの新しいインスタンスを作成し、最後にソングタイプのベクトルに追加します。

私は曲番号に基づいてどの曲にもアクセスできるように考えているので、 songHolder-> at(100) - > get_song_title();

ありがとうございます!

+1

なぜベクトル、なぜポインタのではなく、オブジェクトitelfのコンテナ? – etarion

+0

あなたは何を手助けしたいですか? – birryree

+0

私はfscanfを使ってみました。 |区切り記号は私に問題を与えています。私はそれぞれの行をtolkenizeしたいので、それぞれの項目を区切ります。 –

答えて

1

あなたは物事のカップル実行する必要があります。

1)曲のクラス

class Song { /* STUFF */ } 
)の入力を定義します(そしておそらく出力イテレータを定義

std::istream& operator>>(std::istream& input, Song& data)  { /* STUFF */ } 
std::ostream& operator<<(std::ostream& output, Song const& data) { /* STUFF */ } 

3)次に、ストリーム演算子を使用してファイルからデータを読み取るだけです。

std::vector<Song> songHolder; 
std::ifstream  file("FileName"); 
Song    tmp; 
while (file >> tmp) 
{ 
    songHolder.push_back(tmp); 
} 

4)今、あなたはあなたのベクトルで曲にアクセスできるようにする必要があります

std::cout << songHolder.at(100).get_song_title(); 
// or just dump the song 
std::cout << songHolder.at(100); 
+0

これは、曲のタイトルに空白が含まれている可能性があるため、愚かな手法です。 –

+2

@Oxsnarder:なんで。それはまだ動作します。曲のタイトルは上記の/ * STUFF * /のセクションで扱われます。難易度0の曲のタイトルを簡単に処理できます。 PS。これは比較的基本的なものです。事実、私はさらに進んで、これがC++のすべてのストリーミングの基礎だと言っています。 –

関連する問題