![見出し画像](https://assets.st-note.com/production/uploads/images/77545959/rectangle_large_type_2_a032584283d09fdc50c907a7ec8e608b.png?width=1200)
Keyboard Maestroでの「配列」(Array)の扱いについて
ここ最近、Keyboard Maestroを使って、日々のテキスト編集/入力作業を効率化、爆速化するツールを作り込んでいます。
必要な人限定で狂喜する #KeyboardMaestro マクロ
— DTP Transit (@DTP_Transit) April 5, 2022
・ナンバリング(数字、丸数字、アルファベット)
・箇条書き(・、Markdown、☑)
・「章」や「Chapter」または、入力したテキストを元にナンバリング pic.twitter.com/rQ12ivR6lC
いくつかはnoteの記事にしています。
このようなツール(というかKeyboard Maestroのマクロ)の制作に必要になる「配列」(Array)について解説します。
ざっくりいうと、「東京、神奈川、千葉、埼玉、栃木、茨城、群馬」という文字列から「●番目」を指定して取り出します。
配列の設定と取り出し方法
まず、変数名を設定します。
[to]に「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」のように「,」でつないで配列の“要素”を記述します。この際、要素を' 'で囲む必要はありません。
![](https://assets.st-note.com/img/1651333891973-gBLxqQxrR5.png?width=1200)
「●番目の〜」を取り出すには変数名に[数字]を付けます。これをインデックス番号と呼びます。
%Variable%local_Array[3]%
![](https://assets.st-note.com/img/1651333990109-sgdki29xvQ.png?width=1200)
上記のマクロであれば、配列の3番目の要素である「千葉」が戻ります。Alertアクションは、このように結果を確認することに用います。
![](https://assets.st-note.com/img/1651333995556-76kfIVjLXi.png?width=1200)
配列の長さ(カウント)
JavaScriptなど、言語によってはインデックス番号を0からはじめますが、Keyboard Maestroでは1番目はシンプルに[1]です。
インデックス番号に「0」を設定してみましょう。
%Variable%local_Array[0]%
![](https://assets.st-note.com/img/1651334414014-RCijxA98qo.png?width=1200)
すると、配列の数が戻ります。
![](https://assets.st-note.com/img/1651334697488-7iLHsg6wQA.png?width=1200)
改行されている文字列の配列化
「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」の形式になっていない場合、「改行を,に置換する」アクションを加えれば配列として扱えます。
![](https://assets.st-note.com/img/1651334797295-ZcZlwL8tZz.png?width=1200)
![](https://assets.st-note.com/img/1651334803154-wljZgEsPFD.png?width=1200)
「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」は、「東京, 神奈川, 千葉, 埼玉, 栃木, 茨城, 群馬」のようにスペースを入れたいところですが、スペースは値として扱われてしまいます。
また、“見通し”というか、一覧性が悪いので、このように扱う方がよいかも。
配列の要素内に「,」がある場合
「aaa, bbb」「ccc, ddd」「eee, fff」を要素として扱う場合、
'aaa, bbb','ccc, ddd','eee fff'
のように' 'で囲めばよさそうですが、こちらのマクロを実行してみると、
![](https://assets.st-note.com/img/1651335912807-16KQjcD8fN.png?width=1200)
予想に反して、' 'をまったく無視することがわかります。
![](https://assets.st-note.com/img/1651335937283-yFgfQLjU7a.png?width=1200)
回避策はインデックス番号に続けて、区切り文字を付けます。
%Variable%local_Array[2]:%
組み合わせ(区切り文字、取り出したい番号の変数化)
区切り文字、取り出したい番号を変数化しておけば、区切り文字を柔軟に変更できます。
deviderじゃなくてdividerでした…
![](https://assets.st-note.com/img/1651336938129-hRVv9lzrRn.png?width=1200)
ここで重要になるのが「Dynamic Variable Names」という考え方。
#KeyboardMaestro で、city1、city2のように、ほかの変数を参照して変数を使いたい場合、
— 鷹野 雅弘 Masahiro Takano (@swwwitch) April 30, 2022
%%Variable%%city%Variable%Num%%%
のように記述し、「Filter Variable with Process Tokens」を通す。 pic.twitter.com/TbLlWfo4D2
変数内に変数を入れる場合には、「Filter Variable with Process Tokens」アクションが必要になります。
文章から(正規表現を使って)配列の要素を設定(1)
次のような文章から「東京,神奈川,千葉,埼玉,栃木,茨城,群馬」という配列に変換することを考えてみましょう。
関東圏には「東京」「神奈川」「千葉」「埼玉」「栃木」「茨城」「群馬」などの都道府県があります。
まず、「」で囲まれた文字列は取り出すには、次のように正規表現を記述します。
(?<=「)(.*?)(?=」)
![](https://assets.st-note.com/img/1651340795811-ylWDNO3xKR.png?width=1200)
対象の文字列、および、正規表現を変数として設定します。
![](https://assets.st-note.com/img/1651340866631-oGmXK7tgwu.png?width=1200)
「For Each Item in a Collection Execute」アクションを使って、次のように設定します。
変数内「local_Str」で
変数「local_Regex」にマッチする
「local_text」として取り出し、
変数「local_Array」に「,」を付けてappend(追加)
![](https://assets.st-note.com/img/1651340907591-iIed1wuzRD.png?width=1200)
実際には、「東京,神奈川,千葉,埼玉,栃木,茨城,群馬,」のように最後に余計な「,」が残ってしまいます。
エラーにはなりませんが要素数が狂ってしまうので、消しておきましょう。
![](https://assets.st-note.com/img/1651341163619-xf4nbMdJum.png?width=1200)
まとめると
![](https://assets.st-note.com/img/1651341341711-Z0Bc0qBx44.png?width=1200)
実行すると、次のように表示されます。
![](https://assets.st-note.com/img/1651341351571-PNb8VA2X8O.png?width=1200)
文章から(正規表現を使って)配列の要素を設定(2)
区切り文字を変数化してみましょう。
![](https://assets.st-note.com/img/1651349146475-cVN1N6XBaJ.png?width=1200)
要素の取り出しは、次のように変数を並べます。
%Variable%local_text%%Variable%local_devider%
![](https://assets.st-note.com/img/1651349172410-zTaJJGupCU.png?width=1200)
末尾の記号の削除でも使い回します。
![](https://assets.st-note.com/img/1651349219936-BW8PQPGeRe.png?width=1200)
まとめると次のようになります。
![](https://assets.st-note.com/img/1651349268532-nOcSMoTXgM.png?width=1200)
Keyboard Maestroの配列でできること、できないこと
逆順:OK
インデックス番号に「-3」のように書くと、右側からカウントします。
![](https://assets.st-note.com/img/1651414973119-8jrI1IrZB5.png?width=1200)
右から3番目ですので、「X」が戻ります。
![](https://assets.st-note.com/img/1651414979065-hlpGSL22t2.png?width=1200)
サポートしていないもの
以下はサポートしていません。
%Variable%local_Array[1, 3]%
%Variable%local_Array[1-3]%
%Variable%local_Array[1:3]%
ダウンロード
サンプルマクロを置いておきますので、試してみてください!
参考記事
オマケ
人生何が起きるかわからない…
自分の人生には関係ないなと思っていた「配列」について、夢に見るほど考える日々が訪れるとは想像も付きませんでした。
— 鷹野 雅弘 Masahiro Takano (@swwwitch) April 30, 2022
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5