2010年9月6日月曜日

switch = 選択肢を選んで実行する(Gawk専用) - AWK

AWKのパターンと制御文
○Gawk on Windows △(注記あり)Gawk ×mawk32 ×Mawk ×awk
条件に合う選択肢が見つかったら実行します。一致しなかった時の実行文も書く事が出来ます。

**** 書式
--------
switch ( 比較したい値 ) {
case 選択肢:
[ 実行する文 ]
[ case 選択肢: ]
[ 実行する文 ]
[ default: ]
[ 実行する文 ]
}
--------

o この制御文は、Gawkの拡張機能です。
o 比較したい値 -- 整数や文字列です。
o 選択肢 -- 整数や文字列、もしくは正規表現です。 case 1: のように書きます。
   + 1つは必要です。「 case 選択肢: 」の形で、複数書く事も出来ます。
o 実行する文 -- 複数書く事が出来ます。書かない事も出来ます。
   + この制御文の途中で終了したい時は、breakを使います。
o default: -- 他のどの選択肢にも一致しない時に、実行させる事が出来ます。書かない事も出来ます。


**** 使用例
--------
BEGIN {
  v = "ミクさん";

  switch (v) {
  case /ミク/:
  case 39:
    print "ネギはお好きですか。";
    break;
  case "ルカ":
    print "ルカ様に何か御用ですか。";
    break;
  default:
    print "アイスクリームは品切れです。";
  }
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
o 書き方はお好みで。AWKは、1行で書く事も出来る言語です。


**** 機能
o switchの丸括弧内で指定した「比較したい値」について、「選択肢」を順に評価します。
   + 基本的に、上から順に評価するみたいです。(= 違うかもしれません)
   + 例外は、default句。この句の評価は、何処に書いても最後になります。

o 「選択肢」は、数値や文字列の他に、正規表現を指定する事も出来ます。
   + 同じ値を持つ選択肢を複数指定すると、文法エラーになりました。
o default句を書くと、他のどの選択肢にも一致しない時に、実行させる事が出来ます。

o 「比較したい値」が選択肢と一致すると、その選択肢の後ろに続く文から実行します。
   + 「実行する文」の実行は、「break」文が出てくるまで続きます。
   + 「break」文を使うと、この制御文を途中終了して、次の文に進む事が出来ます。
o この機能をサポートしていない処理系があります。

** 処理系に依存する機能
o この機能をサポートしている処理系は、次の通りです。
   + Gawk on Windows 3.1.7
   + Gawk for Windows 3.1.6
o default句に break を入れると、文法エラーになる処理系があります。
   + Gawk for Windows 3.1.6


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6 -- default句で break不可
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKのパターンと制御文▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > case = switch文の中で、選択肢を指定する
    default = switch文の中で、全ての選択肢と一致しない時に実行する(Gawk専用)
    while = 条件付きで繰り返す
    +
    if = 条件に一致したら実行する
    ?: = 条件演算子