なでしこを使って、日本語でバッチを書こう!

第3回なでしこでバッチ「条件分岐編」

前回は、なでしこを使った文字列の検索、置換を説明しました。今回は、複雑な条件を記述する事が出来る「条件分岐」について説明します。他の言語で言うと、IFやELSEIF、CASE等条件分岐の命令に当たります。なでしこは同等の命令を持っていますが、その記述の方法についてが中心となります。

動作モードの訂正について

なでしこには3つの動作モードがあるのは一回目に解説しましたが、今回のバッチ処理でcnakoモードは適切で無いと思い直しました。よって、一回目も含め全てのサンプルはdnakoモードで動作させてください。理由としては、cnakoモードはプログラム動作して表示後に待機します。しかし、バッチとして利用するには終了後にコマンド画面が待機しているのは都合が悪いと判断したからです。

変更は簡単で、以下の通りです。

図1 なでしこエディタ上での動作モード変更
図1 なでしこエディタ上での動作モード変更

上記のように[設定][なでしこ実行方式][簡易GUI-gnako.exe(U)]を選択してください。本当にこれだけです。

今回利用するデータ

今回はマイクロソフト社のEXCELを利用します。使うデータは以下の通りです。

図2 対象データ
図2 対象データ

基本その1:もし~ならば(IF)

IFの基本構文は以下の通りです。

正しい例
製品とは文字列
オフでエクセル起動
「{デスクトップ}book1.xls」をエクセル開く
「A2」のエクセルセル取得
製品はそれ。
エクセル終了。
もし製品がパンならば
 「主食」と言う
違えば
 「副食」と言う
終わる

このコードの実行結果は、以下のようになります。

図3
図3

このコードは、エクセルを不可視の状態で起動してから、特定のセル(A2)に入っている値を取得して、変数「製品」に代入。もうエクセルというアプリケーションは不要なので「エクセル終了」命令を使って、EXCELを終了させてます。その後に、今回の主題である「条件分岐処理」を実施してます。気をつける点は、インデントだけです。条件式を記述した行と、その結果から処理を返す行はインデントが変わります。もしそれが同じカラム(列)から始まっていると、条件による分岐処理が全く行われなくなりますので注意してください(一応、以下にダメな例を載せておきます⁠⁠。

インデントが無く、ダメな例
製品とは文字列
オフでエクセル起動
「{デスクトップ}book1.xls」をエクセル開く
「A2」のエクセルセル取得
製品はそれ。
エクセル終了。
もし製品がパンならば
「主食」と言う
違えば
「副食」と言う
終わる

上記の場合はインデントが抜けているため、⁠条件分岐処理」の結果を全く考慮せずに「主食」が表示されてます。

基本その2:違えば、もし~ならば(ELSEIF)

ELSEIFの基本構文は以下の通りです。

基本例文
製品とは文字列
値段とは整数
オフでエクセル起動
「{デスクトップ}book1.xls」をエクセル開く
「A2」のエクセルセル取得
製品はそれ。
もし製品がパンならば
 値段は「B2」のエクセルセル取得
 もし値段が110未満ならば
  値段を言う
 違えば
  「高い」と言う
違えば、もし製品が肉ならば
 「高カロリー」と言う。
違えば
 「低カロリー」と言う。
エクセル終了
終わる

このコードの実行結果は、以下のようになります。

図4
図4

上記の場合、変数「製品」の内容が「パン」の時にはエクセルのセル(B2)の値を取得して、パンの値段で更に分岐処理を実行してます。110円未満なら単に表示させて、110円以上だと「高い」と表示させてます。

不等号などの取り扱いが他の言語から移行される方には、わかりづらい場合があるので書き方を変えた例文を載せておきます。

応用例文
製品とは文字列
値段とは整数
オフでエクセル起動
「{デスクトップ}book1.xls」をエクセル開く
「A2」のエクセルセル取得
製品=それ。
もし(製品=パン)ならば
 値段は「B2」のエクセルセル取得
 もし(値段<110)ならば
  値段を言う
 違えば
  「高い」と言う
違えば、もし(製品=肉)ならば
 「高カロリー」と言う
違えば
 「低カロリー」と言う
エクセル終了
終わる

上記の場合、未満を「>」に、等号を「=」に置き換えてみました。あとわかりやすいように、()を使っています。他の言語をやった事がある人ならば、この方が書きやすいと思います。ただし、なでしこの場合の「=」ですが代入(=)と言う意味合いと、比較(==)の意味合いと言う二つの側面がありますので注意してください。どちらの意味合いを持つかは、構文によって自動判定となります。

基本その3:条件分岐(CASE、SWITCH)

CASE、SWITCHの基本構文は以下の通りです。

基本例文
製品とは文字列
オフでエクセル起動
「{デスクトップ}book1.xls」をエクセル開く
「A2」のエクセルセル取得
製品はそれ。
製品で条件分岐
 パンならば、「主食」と言う
 肉ならば、「高カロリー」と言う
 野菜ならば、「低カロリー」と言う
 魚ならば、「DHA」と言う
エクセル終了
終わる

上記の場合、動作結果としては「違えば、もし~ならば」と変わりはありませんが、分岐処理の条件が多い場合は「条件分岐」を利用した方が見やすく、メンテナンスが楽になります。

OpenOffice.orgについて

今回はEXCELを例にしましたが、オープンソースのOpenOffice.orgにも対応してますので、同様の処理は可能です。一番最初の簡単分岐処理だけ、CALC対応に書き直してみますので参考にして下さい。

CALCによる例文
製品とは文字列
オフでCALC起動
「{デスクトップ}book1.ods」をCALC開く
「A2」のCALCセル取得
製品はそれ。
CALC終了。
もし製品がパンならば
 「主食」と言う
違えば
 「副食」と言う
終わる

上記の場合、一目でわかると思いますが、EXCEL関連の命令が全てCALCに置き換わっています。

今回はEXCELを使って、⁠条件分岐処理」について説明しましたが、いかがでしたでしょうか? 他の言語で記述した場合、このような短い行数になりませんが「なでしこ」は専用命令が非常に充実しているので、このように見やすく、わかりやすいプログラムソースとなります。いかがですか、日本語バッチ?

おすすめ記事

記事・ニュース一覧