Arrays (JA)
TPRスクリプト言語では配列を直接サポートしていません。配列はインデックス付き(番号付き)変数を使って間接的に作成することしかできない。あるインデックスの値を参照するには、ネストされた(再帰的な)変数呼び出しが必要です。
この技法はスクリプト言語全体ですでに採用されており、多くのコマンド例で目にすることができます:
画像比較メソッド Image Search などの画像比較メソッドは、画面上の一致する位置のX座標とY座標を含む複数の配列を生成します。
モジュールで表される光学式文字認識(OCR)は、画面上で認識されたテキストを解析します。 Text OCR (%26quot;tocr%26quot;) モジュールは、画面上で認識されたテキストを行の配列に解析します。
この Mail コマンドは、検索された電子メールの属性を含む複数の配列を返します。
この String コマンドはテキストを解析し、要素の配列を生成します。
コードサンプルについては、これらのコマンドの仕様の例のセクションを参照してください。
変数の入れ子
変数呼び出しのネスティングを例にとって説明しましょう。2つの変数があります:
Var A3=100
Var INDEX=3
次に、A3変数の値を以下のように取得することができる:
Var VALUE="{A{INDEX}}"
言語インタープリターはこのコマンドを次のように処理する:
これにより、最も内側の変数呼び出し「{INDEX}」が 3 に置き換えられます。これにより、次のような新しいコマンドが生成されます。
VarVALUE="{A3}"上記のコマンドは標準的な A3 変数参照として解決され、VALUE 変数には 100 が代入される。
配列の作成
INT "という変数ベースで、1から3までの3つの整数の配列を作成してみよう。これは、各変数を別々に代入することで実現できる:
Var INT1=1
Var INT2=2
Var INT3=3
配列は For Statement ループを使ってもよい:
for (i=1; {i}<=3; i={i}+1) {
Varg "set" name="INT{i}" value="{i}" scope=script
}
配列値の反復処理
配列の値の反復処理は、上のループの例と似ています。配列の長さがわかっていれば、たとえば次のように値を出力することができる:
for (i=1; {i}<=3; i={i}+1) {
Var V="{INT{i}}"
Log "Value at index {i} is {V}"
}
配列の長さがわからない場合は、番号のついた変数が存在する限り繰り返し処理を行うようにループを変更することができる:
Var n=1
for ( ; exists INT{n}; ) {
Var V="{INT{n}}"
Log "Value at index {n} is {V}"
Eval n={n}+1
}
配列の値を設定するには、再びネストした変数を使う。例えば、各配列の値をインクリメントしてみよう:
for (i=1; {i}<=3; i={i}+1) {
Eval INT{i}="{INT{i}}+1"
}
配列の削除
配列全体を一度に削除するコマンドはない。変数を繰り返し、ひとつひとつ削除していく必要があります:
for (i=1; {i}<=3; i={i}+1) {
Varg "delete" name="INT{i}"
}
例
ローカルのMac OS XまたはUnix/Linuxフォルダー内のファイルをリストアップして印刷する例を以下に示す:
# 「ls」を実行してフォルダー内のファイルを一覧表示します
Exec "ls /Users"
# 正規表現を使用して Exec コマンド出力を行に分割します
String split "{_EXEC_OUTPUT}" pattern="\r?\n"
# ディレクトリ内の最初のファイルを出力します
Var FILE1= "{_STRING1}"
Log "The very first file is {FILE1}"
# 他のファイルをリストする
Log "Other files:"
for (i=2; i<={_STRING_COUNT}; i=i+1) {
Log "File #{i} is: {_STRING{i}}"
}