配列の敷居を低くし隊
「配列」をかじりました。
敷居の低いライブラリのお裾分けです。
あいにくわたし自身はシナリオ共有サークルへは上げられません。
もし使えそうなら、どなたかしれっと上げてください。
「改善/進化/発展させてみた」の便乗もウェルカムです。
配列の経験
- 配列はVBAとかで使ったことがある程度
- WinActorの辞書と配列関連ライブラリは、サンプルシナリオで使ったことがある程度
配列のイメージ
- 効率的で爆速
- インデックス(ゼロ始まり)で数える
- 要素に一括で定型処理(計算とか文字列加工等)を施すのに有利な手法
WinActor×配列への思い
- 敷居がもっと低ければ良いのに、、
- Excelから1セルずつ読み取るデータがベースだと、爆速効果がだいぶ薄れちゃうんじゃなかろうか、、
- 1000件とか10000件とかだとどうなんだろう、、
- ブラックボックス感が強い、、
→ 機能限定で、爆速のまま、敷居を低くしてみました!
きっかけのスレッド
活用イメージ
- 改行区切りのテキストファイルを配列に一括登録
- 任意のインデックスの値を爆速で取得
- ループ*で高速に値を設定(表計算やWebサイトを想定)
* 取得するほうのループ(順次処理)は不可避っぽい
パーツ構成
- テキストファイル読込
- 配列操作 ← 今回作ってみたライブラリ
- 待機ボックス
配列操作のスクリプト
- ※ 「スクリプト実行」のスクリプトタブに貼り付けて使います。
' 改行区切りのリストを取得
newLine = !読み込みデータ!
' カンマ区切りに変換
csv = Replace(newLine, vbCrLf, ",")
' 配列に変換
arr = Split(csv, ",")
' インデックスの値を取得
SetUmsVariable $値$ , arr(!インデックス!)
注釈タブのテキスト案
改行区切りのテキストを一次元配列に取り込み、
インデックス指定で値を取り出します。
機能対応状況
- ※ ダンプ
- ※ 初期化
- ◎ 情報取得
- ◎ 情報挿入
- ※ 情報更新
- ※ 指定インデックスの情報初期化
凡例
- ◎ ほぼ互換
- ※ 未対応(きっと手が届く)
リファレンスサイト
配列の使い方 | VBScript さんま屋
http://sammaya.jugem.jp/?eid=6
所要時間計測(体内時計)
- 配列に読み込んだ件数
A. 1100件
B. 10000件 - 読み込みから取得を試したインデックス
①3
②1050
③9900
A B
① ◎ 10秒
② ◎ 10秒
③ ー 10秒凡例
◎ 一瞬
ー 対象外
変数の文字数制限は適宜解除してください。
使用感
- 実務では1000件も扱えれば十分な場面が多そう
- 効率は配列の要素数に比例しそう
改善/進化/発展の方向性
- 実用的な使いかたの特定
- 実用性を踏まえた、設定項目等の仕様変更
- 場合によっては、テキスト読み込みとがっちゃんこして、1ライブラリ化
- 二次元配列への対応
配列関連のライブラリがいくつかリリースされてるので、時間を見つけて比較しておこうと思います。
配列は話題には上がるものの、実用を目指してそうなスレッドは案外少ないようです。
(一次元配列)
https://winactor.com/questions/question/フォルダ内のファイル一覧を配列に入れ、1個ずつ/
(二次元配列)
https://winactor.com/questions/?q=Excel%20範囲を一括で2次元配列に取込、2次元配列を成型後%20Excel%20に一括貼付したい
https://winactor.com/questions/question/二重ループを使用してexcelファイルのセルを読み取/