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

第4回 なでしこでバッチ「繰り返し編」

この記事を読むのに必要な時間:およそ 2 分

基本その3:~の間(LOOP~while)

LOOP-WHILEの基本構文は以下の通りです。

リスト3 LOOP-WHILEの基本例文

セル行とは整数
製品とは配列
セル行=2
オフでエクセル起動
「{デスクトップ}book2.xls」をエクセル開く
オンの間
 「A{セル行}」のエクセルセル取得
 もしそれが空ならば
  抜ける。
 違えば
  それを製品に配列追加
 セル行=セル行+1
製品を言う。
エクセル終了
終わる。

実行結果は,以下の図のようになります。

図4 リスト3の実行結果

図4 リスト3の実行結果

命令「間」は,何らかの条件を満たすまで無限に処理を実行します。上記のオンの間とは,条件が正しいときという意味です。以下のような書き方もできます。

(カウント<5)の間

A2からA5までのセルを順番に取得して,変数「製品」に配列として追加しています。ただし,A6以降のセルには何も無いので変数「製品」には空が追加されてしまいます。それでは都合が悪いので,もし~ならば構文で命令「間」のループを抜けるようにしてます。

実際の使い方について

今回は繰り返し命令を説明しましたが,前回の「条件分岐」と違い,使うシーンが想定しづらいと思います。特に「回」については,実務で繰り返し回数があらかじめ分かっているケースがほとんどないので使いづらいです。

「反復」についてはファイルを読み込む時に,命令「毎行読む」を組み合わせるのが一般的で,配列の中身を繰り返し処理して,条件分岐させるのにも利用しますので一番わかりやすいと思います。

また,⁠間」については,使うシーンがもっとも難しいです。何かの処理が終わっているかどうかを判定するのは,マルチタスクのように並行処理を実施しているのでなければ不要ですしね。ただ,せっかくですので「間」を使った例文を一つ示しておきます。

リスト4 ⁠間」による実務バッチの例文


状況とは整数
残量とは整数
カウント=1
オンの間
 負荷=CPU使用率取得
 残量=「C:\」のディスク空きサイズ
 もし負荷が1以上ならば
  「{負荷}{改行}」を「{デスクトップ}注意.txt」に追加保存
  1秒待つ
  「{残量}{改行}」を「{デスクトップ}注意.txt」に追加保存
 0.1秒待つ
 カウント=カウント+1
 もしカウント=50ならば
  抜ける。
終わる。

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

図5 リスト4の実行結果

図5 リスト4の実行結果

上記のコードを一目見ていただくと分かると思いますが,永遠にループするのを防ぐために,変数「カウント」を利用してカウント回数が50になったら強制的に終了させてます。

そして,サーバーのCPU負荷やディスクの空き容量などをそれぞれ命令「CPU使用率取得⁠⁠,命令「ディスク空きサイズ」で取得してから,条件分岐でテキストファイルに書き出すようにしてます※1⁠。

※1
ずっと常駐させるのであれば,カウントが記載されている行を全て削除するだけでOKです(当然ですが「抜ける」命令も削除します⁠⁠。

実際に業務でこのようなバッチを書きたい場合は,何らかのキーを押した時に「抜ける」ようにするとか,ログを書き出しているテキストファイルを毎日の日付で自動で作成させるとよいでしょう。

今回は「繰返し処理」について説明しましたが,いかがでしたでしょうか。本稿を通して,日々のバッチ的な処理が少しでも楽になれば幸いです。

著者プロフィール

choco

東京情報システム株式会社 システム営業部IxDグループに所属。社内ではプロジェクトマネージャーとして日々奔走中。

4年ほど前に「なでしこ」に出会い,その魅力に取り付かれて外販用資産管理ソフトを「なでしこ」で作成。現在は,なでしこ友の会でDB接続に関するプログラムをブログで紹介中。

URLhttp://www.choco.org.uk/chocodb/