前回は、なでしこを使った文字列の検索、置換を説明しました。今回は、複雑な条件を記述する事が出来る「条件分岐」について説明します。他の言語で言うと、IFやELSEIF、CASE等条件分岐の命令に当たります。なでしこは同等の命令を持っていますが、その記述の方法についてが中心となります。
動作モードの訂正について
なでしこには3つの動作モードがあるのは一回目に解説しましたが、今回のバッチ処理でcnakoモードは適切で無いと思い直しました。よって、一回目も含め全てのサンプルはdnakoモードで動作させてください。理由としては、cnakoモードはプログラム動作して表示後に待機します。しかし、バッチとして利用するには終了後にコマンド画面が待機しているのは都合が悪いと判断したからです。
変更は簡単で、以下の通りです。
上記のように[設定]-[なでしこ実行方式]-[簡易GUI-gnako.exe(U)]を選択してください。本当にこれだけです。
今回利用するデータ
今回はマイクロソフト社のEXCELを利用します。使うデータは以下の通りです。
基本その1:もし~ならば(IF)
IFの基本構文は以下の通りです。
このコードの実行結果は、以下のようになります。
このコードは、エクセルを不可視の状態で起動してから、特定のセル(A2)に入っている値を取得して、変数「製品」に代入。もうエクセルというアプリケーションは不要なので「エクセル終了」命令を使って、EXCELを終了させてます。その後に、今回の主題である「条件分岐処理」を実施してます。気をつける点は、インデントだけです。条件式を記述した行と、その結果から処理を返す行はインデントが変わります。もしそれが同じカラム(列)から始まっていると、条件による分岐処理が全く行われなくなりますので注意してください(一応、以下にダメな例を載せておきます)。
上記の場合はインデントが抜けているため、「条件分岐処理」の結果を全く考慮せずに「主食」が表示されてます。
基本その2:違えば、もし~ならば(ELSEIF)
ELSEIFの基本構文は以下の通りです。
このコードの実行結果は、以下のようになります。
上記の場合、変数「製品」の内容が「パン」の時にはエクセルのセル(B2)の値を取得して、パンの値段で更に分岐処理を実行してます。110円未満なら単に表示させて、110円以上だと「高い」と表示させてます。
不等号などの取り扱いが他の言語から移行される方には、わかりづらい場合があるので書き方を変えた例文を載せておきます。
上記の場合、未満を「>」に、等号を「=」に置き換えてみました。あとわかりやすいように、()を使っています。他の言語をやった事がある人ならば、この方が書きやすいと思います。ただし、なでしこの場合の「=」ですが代入(=)と言う意味合いと、比較(==)の意味合いと言う二つの側面がありますので注意してください。どちらの意味合いを持つかは、構文によって自動判定となります。
基本その3:条件分岐(CASE、SWITCH)
CASE、SWITCHの基本構文は以下の通りです。
上記の場合、動作結果としては「違えば、もし~ならば」と変わりはありませんが、分岐処理の条件が多い場合は「条件分岐」を利用した方が見やすく、メンテナンスが楽になります。
OpenOffice.orgについて
今回はEXCELを例にしましたが、オープンソースのOpenOffice.orgにも対応してますので、同様の処理は可能です。一番最初の簡単分岐処理だけ、CALC対応に書き直してみますので参考にして下さい。
上記の場合、一目でわかると思いますが、EXCEL関連の命令が全てCALCに置き換わっています。
今回はEXCELを使って、「条件分岐処理」について説明しましたが、いかがでしたでしょうか? 他の言語で記述した場合、このような短い行数になりませんが「なでしこ」は専用命令が非常に充実しているので、このように見やすく、わかりやすいプログラムソースとなります。いかがですか、日本語バッチ?