スクリプト9 (スクリプトの書き方の補足)


これまで述べなかった細かいことについて書きます。

◆ スタンダードコンフィギュレーション

Ver.4.1でスタンダードコンフィギュレーションというオプションが追加されました。 Advanced SetupのConfigurationタブの「Use standard configuration」です。 これはスクリプトの互換性を保つためにエスケープ文字や変数の置き換えなどで使用する 文字を標準とされている文字に強制する,というオプションです。

Charactersタブの設定はユーザーが自由に決めることができます。それゆえ エスケープ文字や変数の置き換えで使用する文字(スクリプト2で設定した「&(var)」のことです) はユーザーによって異なる可能性があります。ある人は変数置き換え文字を「&」と設定しているかもしれませんし, 別のある人は「$」を設定しているかもしれません。

このようにユーザーによって設定が違うとスクリプトの互換性に問題が出てきます。いちいち他人の書いたスクリプトを 自分の設定に合わせて書き換える,という作業が発生する可能性があるのです。

おそらくそのような問題を回避するために標準のルールを決めてしまおう,という目的で作られたのがこの「スタンダードコンフィギュレーション」 だと思います。スクリプトのルールを決めてしまい,皆がそれに合わせれば互換性に問題がなくなる,というわけです。

そこでこのサイトもこのスタンダードコンフィギュレーションに従ってスクリプトを書いていくことにします。 これ以降この「Use standard configuration」にチェックを入れていることを前提に話を進めていきます。

このチェックを入れると次のようなスクリプトのルールが作られます。
  • 特殊なキーを送るときは「{」と「}」で括る(例: {f4} )
  • 変数を置き換える文字(中身を取り出す)は「&」を使う(例: &(var) )
  • エスケープ文字は「\」を使う(例: \" )
  • 論理積,論理和はそれぞれ「&&」,「||」を使う。(「&」や「|」は不可)
他にもいくつかあるようですが重要なのはこれぐらいでしょう。


◆ スクリプトファイル

今までスクリプトは単なるテキストファイル(*.txt)に書いてきました。 しかしPowerProには標準のスクリプトファイル用拡張子があり,その拡張子は「powerpro」です。 つまり「test.powerpro」のようにするのが普通なのです。というわけでこれからは*.powerproというファイルに書くことにします。 別に*.txtファイルに書いてもいいのですが,この拡張子はPowerProに関連付けられており,簡単にスクリプトを実行できたりします。 何かと便利だと思うのでこれからは*.powerproファイルに書くことにします。拡張子が変わるだけなので中のテキストなどはこれまで通りです。

あとスクリプトファイルを置く場所は通常「scripts」フォルダ内です(通常はC:\Program Files\PowerPro\scripts)。 このフォルダ内に置くといろいろ便利なので(後述)このフォルダ内に置くことをお勧めします。


◆ スクリプトの実行

これまで*Script RunFileなどを使ってスクリプトを実行してきましたが,これとは別のスクリプトの実行方法があります。 それは

.filename

という書き方です。これだけでは何のことかわからないと思うので具体的にやってみましょう。

scriptsフォルダ内に「test.powerpro」という空のファイルを作り,メモ帳などで開きます。 scriptsフォルダ内でなければならないので注意してください。そして例えば次のスクリプトを書きます。

debug 実行!

別に何でもいいのですがとりあえず実行されたことがわかるようにします。そしてこのスクリプトを実行するために ボタンやホットキーにコマンドとして「.test」だけを書いて割り当てます。testの前のドットを忘れないで下さい。 おそらく予想付くと思いますがこの「test」は「test.powerpro」の「test」です。 「myscript.powerpro」ならコマンドは「.myscript」となります。 これだけ書いて実行すればそのスクリプトを実行することができます。

この記述ではscriptsフォルダ内のファイルのみ実行できます。他のフォルダにあるスクリプトファイルは *Script RunFileなどを使わなければなりません(実は*Script Pathを使うとPowerProがスクリプトを見に行くフォルダを 増やせるのですがここでは説明しません)。先ほどscriptsフォルダ内にスクリプトファイルを置いた方がいいと言ったのは この記述を使いたいがためです。


◆ 引数と戻り値

スクリプトファイルは引数をとることができます。 構文としては次のようになります。

.filename(arg1, arg2, …, arg8)

引数は8つまで取ることができるようです。このように書くと引数がそのスクリプトファイルに渡されます。 それでは渡された引数はどう扱うかというと「arg(n)」という変数のような記述で取得できます。 第一引数を取得するときは「arg(1)」,第二引数を取得するときは「arg(2)」・・・,という感じで記述します。

さらに戻り値を返すことも可能です。戻り値を返すときは最後に「quit(returnvalue)」と記述します。 この「returnvalue」に戻り値を指定します。

具体的に使ってみましょう。 「getmax.powerpro」というファイルを作り(もちろんscriptsフォルダ内にです),次のスクリプトを書きます。

;;getmax.powerpro
max = arg(1)
if (arg(2) > max) do
   max = arg(2)
endif
if (arg(3) > max) do
   max = arg(3)
endif
quit (max)

このスクリプトは3つまで引数を取り,その中で最も大きい整数を返す,というスクリプトです。

次に確認用のスクリプトを書きます.「test2.powerpro」というファイルを作り次のスクリプトを書きます。

;;test2.powerpro
var = .getmax(5,12,9)
debug &(var)

あとはこのスクリプトを実行すれば最も大きな数の12という数字がデバッグウィンドウに表示されるはずです。


◆ ラベル

スクリプト内でラベルを付けられます。付けるには「@」の後にラベル名を書くだけです。

@label

のような感じです。ラベル名は英数字で自由に付けられます。このラベルにジャンプするときは

jump label

のように書きます。ジャンプするときは「@」は必要ありません。具体的に使ってみましょう。

次のスクリプトは単純にループを作り10回カウントしたらループを抜ける,というものです。 特に意味はないです。

count = 0
@loop
count = count + 1
if (count <= 10) do
    debug &(count)
    jump loop
endif
debug end

これを実行するとデバッグウィンドウに1から10まで表示されループを抜けるとendと表示されます。 本来はラベルでループを作るのではなくfor文などを使うべきですがとりあえず今回はラベルの簡単な例としてあげておきます。

さらにスクリプト実行時にも直接ラベルに飛ぶことができます。これを使うと一つのファイルに複数のスクリプトを書くことができます。 使い方は次のようになります。

.myscript@mylabel(args)

スクリプトファイル名の後に@を付けてラベル名を書きます。もちろん引数を取ることもできます。

具体的に使ってみましょう。次のスクリプトは一つのスクリプトファイルの中に書いてください。 とりあえず「test3.powerpro」とでもしておきます。

;;test3.powerpro

;;最大の整数を返す
@getmax
max = arg(1)
if (arg(2) > max) do
   max = arg(2)
endif
if (arg(3) > max) do
   max = arg(3)
endif
quit (max)

;;最小の整数を返す
@getmin
min = arg(1)
if (arg(2) < min) do
   min = arg(2)
endif
if (arg(3) < min) do
   min = arg(3)
endif
quit (min) ;;getminの終わり

;;テスト
@test
debug テストです
quit

このスクリプトファイルの中には大きく分けて3つのスクリプトがあります。 「getmax」,「getmin」,「test」の3つのラベルで区切られています。 ここで注意してほしいのはそれぞれのスクリプトが終わるところで「quit」を入れることです。 例えば@getminを実行してその終わりのquit(「getminの終わり」と書かれているところのquit)がなかったとします。 そうするとスクリプトはそこで終わらずそのさらに下にある「test」のスクリプトまで実行してしまいます。 これでは正しい結果を得られるはずがありません。

具体的にこのスクリプトを実行するときは次のようにします。

var = .test3@getmin(32,13,63)
debug &(var)
var = .test3@getmax(22,4,23)
debug &(var)
.test3@test

それぞれのスクリプトを分離して呼ぶことが可能です。 これを使うと一つのファイルに複数のスクリプトを書くことができ,機能別にまとめることができます。


スクリプト8へ  トップへ