見出し画像

Keyboard Maestroでの「配列」(Array)の扱いについて

ここ最近、Keyboard Maestroを使って、日々のテキスト編集/入力作業を効率化、爆速化するツールを作り込んでいます。

いくつかはnoteの記事にしています。

このようなツール(というかKeyboard Maestroのマクロ)の制作に必要になる「配列」(Array)について解説します。

ざっくりいうと、「東京、神奈川、千葉、埼玉、栃木、茨城、群馬」という文字列から「●番目」を指定して取り出します。


配列の設定と取り出し方法

まず、変数名を設定します。

[to]に「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」のように「,」でつないで配列の“要素”を記述します。この際、要素を' 'で囲む必要はありません。

「●番目の〜」を取り出すには変数名に[数字]を付けます。これをインデックス番号と呼びます。

%Variable%local_Array[3]%

上記のマクロであれば、配列の3番目の要素である「千葉」が戻ります。Alertアクションは、このように結果を確認することに用います。

配列の長さ(カウント)

JavaScriptなど、言語によってはインデックス番号を0からはじめますが、Keyboard Maestroでは1番目はシンプルに[1]です。

インデックス番号に「0」を設定してみましょう。

%Variable%local_Array[0]%

すると、配列の数が戻ります。

改行されている文字列の配列化

「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」の形式になっていない場合、「改行を,に置換する」アクションを加えれば配列として扱えます。

「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」は、「東京, 神奈川, 千葉, 埼玉, 栃木, 茨城, 群馬」のようにスペースを入れたいところですが、スペースは値として扱われてしまいます。

また、“見通し”というか、一覧性が悪いので、このように扱う方がよいかも。

配列の要素内に「,」がある場合

「aaa, bbb」「ccc, ddd」「eee, fff」を要素として扱う場合、

'aaa, bbb','ccc, ddd','eee fff'

のように' 'で囲めばよさそうですが、こちらのマクロを実行してみると、

予想に反して、' 'をまったく無視することがわかります。

回避策はインデックス番号に続けて、区切り文字を付けます。

%Variable%local_Array[2]:%

組み合わせ(区切り文字、取り出したい番号の変数化)

区切り文字、取り出したい番号を変数化しておけば、区切り文字を柔軟に変更できます。

deviderじゃなくてdividerでした…

ここで重要になるのが「Dynamic Variable Names」という考え方。

変数内に変数を入れる場合には、「Filter Variable with Process Tokens」アクションが必要になります。


文章から(正規表現を使って)配列の要素を設定(1)

次のような文章から「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」という配列に変換することを考えてみましょう。

関東圏には「東京」「神奈川」「千葉」「埼玉」「栃木」「茨城」「群馬」などの都道府県があります。

まず、「」で囲まれた文字列は取り出すには、次のように正規表現を記述します。

(?<=「)(.*?)(?=」)
https://rubular.com/r/g1bcTJWdbDQ770

対象の文字列、および、正規表現を変数として設定します。

「For Each Item in a Collection Execute」アクションを使って、次のように設定します。

  • 変数内「local_Str」で

  • 変数「local_Regex」にマッチする

  • 「local_text」として取り出し、

  • 変数「local_Array」に「,」を付けてappend(追加)

実際には、「東京,神奈川,千葉,埼玉,栃木,茨城,群馬,」のように最後に余計な「,」が残ってしまいます。

エラーにはなりませんが要素数が狂ってしまうので、消しておきましょう。

まとめると

実行すると、次のように表示されます。

文章から(正規表現を使って)配列の要素を設定(2)

区切り文字を変数化してみましょう。

要素の取り出しは、次のように変数を並べます。

%Variable%local_text%%Variable%local_devider%

末尾の記号の削除でも使い回します。

まとめると次のようになります。


Keyboard Maestroの配列でできること、できないこと

逆順:OK

インデックス番号に「-3」のように書くと、右側からカウントします。

右から3番目ですので、「X」が戻ります。

サポートしていないもの

以下はサポートしていません。

%Variable%local_Array[1, 3]%
%Variable%local_Array[1-3]%
%Variable%local_Array[1:3]%

ダウンロード

サンプルマクロを置いておきますので、試してみてください!


参考記事


オマケ

人生何が起きるかわからない…


定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5