LoginSignup
3
4

More than 5 years have passed since last update.

【WinActor】一次元配列

Last updated at Posted at 2019-04-15

開発には欠かせない存在、一次元配列ですが、WinActorでは使い方が少々特殊でした。
使えずに諦めて、別の方法で何とか回避された方もいらっしゃると思いますので、実際に開発現場で行った初期化から格納・参照まで紹介していきます。

1.配列の初期化
配列を使用する場合、必須です。
使用する配列が1つだけであれば、最初に一度初期化しておくだけでいいです。
※複数使用する場合は、後述の「3.一次元配列使用時の注意点」を参照してください。

こちらのノードを使用します。
03_変数\02_辞書と配列\1次元配列操作(初期化)

初期状態だと、配列名の設定ができません。
以下のようにスクリプトを変更すると、配列名を指定することができます。

array.vb

Dim rootArray
arrayName = !配列名!

'ルート配列の存在確認
Set rootArray = WScript.CreateObject("Scripting.Dictionary")
rootArray.RemoveAll()
If rootArray.Exists(arrayName) Then
  getArray = rootArray.Item(arrayName)
  Erase getArray
  rootArray.Remove arrayName
End If

2.配列の格納・参照
一次元配列への値格納と参照はこちらのノードを使用します。
・格納:03_変数\02_辞書と配列\1次元配列操作(情報挿入)
・参照:03_変数\02_辞書と配列\1次元配列操作(情報取得)

どちらも、配列名を設定することができます。
ですが、配列名を指定しているにも関わらず、「配列を指定してください」というエラーが発生するので、以下のスクリプトをコメントアウトすることで正常に作動しました。

array.vb

'入力チェック
If (Len(arrayName) = 0) Then
  errorMsg = "配列名を入力してください"
  Err.Raise 1, "", errorMsg
  WScript.Quit
End If

↓↓↓↓↓

array.vb

'入力チェック
'If (Len(arrayName) = 0) Then
'  errorMsg = "配列名を入力してください"
'  Err.Raise 1, "", errorMsg
'  WScript.Quit
'End If

3.一次元配列使用時の注意点
3-1.インデックスについて
配列のノードにある説明文では、インデックスは0~となっていますが、0を指定すると範囲外でエラーとなるため、1から指定する必要があります。

3-2.配列を複数使用する場合
WinActorでは、なぜか1ロボットにつき1配列しか使わない前提で作成されており、
配列を複数用意して、それぞれに値を格納すると、事前に格納した配列に領域が侵されるという事態が発生します。

例:
手順1:
配列Aに以下の値を格納
1
2
3

手順2:
配列Bに以下の値を格納
4
5

手順3:
配列Aの1番目を参照
4

対策としては、その配列を本当に使用する直前で初期化し、
格納・参照を行う必要があります。
初期処理で最初にまとめて初期化しておきたくなりますが、上記のような状態に陥ります。
間で別の配列格納処理(例だと配列B)を挟む場合は、再度初期化と格納処理が必要なので、
共通関数化しておくと便利です。

以上が、WinActorでの一次元配列の初期化、格納・参照でした。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4