第9回 コーディング(1)(6月15日)

■ Yahoo サイト情報のとりこみ

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 を完成させよ。


(c) Masato TOKUHISA (2007, June 12.)