「ペーストするたびに、数字を1ずつ増やしてく」を#KeyboardMaestroで実現する
以前、ごんさんがこのようなツイート(ポスト)をされていました。
その後、やりとりをしてアルファベットに対応するなど、手を入れてきたのですが、次に挙げる数字への対応がペンディングになっていました。
「0001」「Section 001」のような0付き数字
「1-1」「1-2-3」のようなハイフン付き
なんとかカタチになったので、そのロジックを解説します。
なお、値を1増やすことは〈インクリメント〉と呼びます。
「0001」「Section 001」のような0付き数字
「0001」「Section 001」はゼロパディングと呼ばれます。英語圏でも「zero padding」で通じるようです。
With Format
まずは基本から。
Set Variable To Calculationで[Format Result]オプションをONにすることで計算結果に表示形式を適用できます。
変数numに「1」を設定
Set Variable To Calculationで「変数num」をインクリメントしつつ、[With Format]で「000」を指定
計算結果の「2」が「002」としてアウトプットされます。
「Section 9」をインクリメントしつつ「Section 010」にするには、次のように設定します。
これで完成!と思いきや、ユースケースとして求められる桁数はさまざまです。それに対応する方法を考えます。
繰り上がりで 桁数が足りない場合
「Section 9999」をインクリメントして「With Format:000」を指定したらどうなるのか心配ですよね…
特に何もケアする必要なく、「Section 10000」が返ります。ナイス!!!
桁数を計算
そもそもの命題が「「ペーストするたびに、数字を1ずつ増やしてく」ことですので、求められる桁数はクリップボード内の数字を参照すればいいわけです。
「CHARACTERS(0005)」と記述すると、桁数の「4」が返ります。
「CHARACTERS(%Variable%num%)」のようにカッコ内に変数の指定も可能です。
ところがここで問題… [With Format]フィールドは変数を参照できないのです…
CalculateFormat
変数アクションで[With Format]を使う代わりに、CalculateFormatを使うことを考えてみます。
「%CalculateFormat%num + 1%0000%」のように指定すると、変数「num」をインクリメントしつつ、「0000」で表示します。
表示形式を変数化する
変数「digit」を作成、表示形式「0000」を入れておきます。
この変数を参照するため、次のように記述します。
\%CalculateFormat\%num+1\%%Variable%digit%\%
変数を参照している箇所「%Variable%digit%」以外の「%」の前に「/」を入れてエスケープします。
ただし、これだけでは計算されないので、[Filter with Process Tokens]アクションを“おまじない”のように入れておきます。
全体像はこんな感じ。
桁数と同じ数だけ0を繰り返す
対象とする値から桁数分の0を返すことを考えます。つまり、「0123」のとき、「0000」が戻るようにします。
いくつかのアプローチがあると思いますが、今回は次のようにしてみました。
変数「digit」に「0」を指定→ これをAppendする設定にする
※Appendは追加していくことRepeat Actionsで回数を指定
上記の場合、実行すると「000」が返ります。
対象とする値が「0123」のとき、ここから「0000」を返す場合は、次のように設定します。
日付への対応
次のようなフォーマットの日付に対応できるようにアップデートしました。西暦が入っていない場合には「今年」と考えます。
3月31日
2024年3月31日
2024年3月31日(土)
2024年3月31日(土)
2024年3月31日[土]
2024年3月31日(土曜日)
2024年3月31日(土曜日)
2024年3月31日[土曜日]
3月31日(土)
3月31日(土)
3月31日[土]
3月31日(土曜日)
3月31日(土曜日)
3月31日[土曜日]
ダウンロード
ここまでのマクロです。
アルファベットなどを含んだ完全版です。
ここから先は
¥ 200
定期マガジンを購読されるとサンプルファイルをダウンロードいただけます。 https://note.com/dtp_tranist/m/mebd7eab21ea5