Yahoo F1 のサイトには、ドライバーズポイントの一覧表がある(http://sports.yahoo.co.jp/f1/2007/points/drivers.html)。ここからデータを取り込むプログラムを作成しよう。
取り込みプログラムは、仕様書に依存する部分である。今回は次の仕様を想定して作成する。
取り込みプログラムのルーチンの内部仕様を示す:
■ スコアテーブル解析部 ・スコアテーブルの前半の読み捨て 【関数名】int load_to_juni_line(FILE *fp) 【引 数】fp ... 入力ファイルのデスクリプタ 【返り値】解析正否フラグ 0(失敗) または 1(成功) 【方 式】fgets で行を読み込み、先頭の4文字が "順位" であるかどうかを判定し、 それが得られるか、行が無くなるまで読み込みを繰り返す。 ・名前行の読み込み 【関数名】int loda_name_line(FILE *fp, NameCard *nc) 【引 数】fp ... 入力ファイルのデスクリプタ nc ... 読み込みの結果を格納するネームカード 【返り値】解析正否フラグ 0(失敗) または 1(成功) 【方 式】fgets と sscanf を用いて、順位、ドライバー番号、および、選手名を 読み込む。 ・スコア行の読み込み 【関数名】int load_score_line(FILE *fp, NameCard *nc) 【引 数】fp ... 入力ファイルのデスクリプタ nc ... 読み込みの結果を格納するネームカード 【返り値】解析正否フラグ 0(失敗) または 1(成功) 【方 式】括弧付きのチーム名の読み込む。次に、空白部分と合計値の読み込む。 次に、MAX_GP の回数だけ、空白とドライバーポイントの組の読み込み を行う。 ・スコアテーブル解析部の主部分 【関数名】NameCard **load_score_table(char *filename) 【引 数】filename ... スコアテーブルファイルの名前 【返り値】ネームカードの配列 【方 式】MAX_PILOTS のぶんだけ、NameCard の配列を確保する。「スコアテーブ ルの前半の読み捨て」を行う。高々 MAX_PILOTS の回数まで 「名前行の 読み込み」、「スコア行の読み込み」を行うが、読み込むべきデータが 無くなると、この繰り返しは終了する。 ■ 定数 ・MAX_GP ....... グランプリの回数を表す。 (主として、NameCard に関連) ・MAX_PILOTS ... 確保する選手数の最大値を表す。 (主として、load_score_table に関連) |
上記のサブルーチンのヒントを用意した。load_score_table を完成させよ。