次へ: 4 課題文の作成 上へ: AWK による簡単なタイプ練習ソフト 前へ: 2 タイプ練習ソフトの仕様 (PDF ファイル: awk2.pdf)


3 おおまかな設計図

[1] に書いたように、AWK を行単位のフィルタとして使う場合、 実行部分は大きく 3 つのブロックに分かれます (そのうちいくつかは省略可)。
  1. BEGIN{} ブロック: 最初 (入力の前) に 1 回だけ実行される
  2. {} ブロック: 各入力行に対して 1 回ずつ実行される
  3. END{} ブロック: 入力が終わった後に 1 回だけ実行される
{} ブロックは、その前に条件 (パターン) をつけて、 そのブロックを適用する行を選択することも可能ですし、 {} ブロック自体を複数置くことも可能ですが、 それはパターンのない一つの {} ブロックでも同じことが実現できますので、 ここでは簡単のため、パターンのない一つの {} ブロックで作ることにします。

課題に対するキーボードからの入力 (標準入力) を {} ブロックに対する各入力行と見れば、 このプログラムのおおまかな設計図として、 次のようなものが考えられます。

  BEGIN{
    # (1) 課題文を作成して画面に表示
    # (2) 現在時刻を記憶 (入力開始時刻)
  }
  { ## ここはキーボードからの 1 行の入力が済んだ後に実行される
    # (3) 現在時刻を記憶 (入力終了時刻)
    # (4) 入力行と課題文とを比較
    # (5) 違いがなければ終了し、
    #     違いがあればその結果を表示し、現在時刻を記憶 (入力開始時刻)
  }
  END{
    # (6) 途中でやめた場合はそのような表示をする
    # (7) 正常終了した場合はそのような表示をする
  }
ここでは、AWK のコメント (# から行末までが AWK のコメント) の形で 書いてみました。

ちなみに、私がプログラムを実際に書くときは、 だいたいいつもこのようなおおまかな設計図から書き始めます。 後はこの (1)$\sim$(7) の部分を実際に作っていけばいいわけです。


次へ: 4 課題文の作成 上へ: AWK による簡単なタイプ練習ソフト 前へ: 2 タイプ練習ソフトの仕様
竹野茂治@新潟工科大学
2006年4月27日