LoginSignup
16

More than 1 year has passed since last update.

posted at

Power Automateで文字列を1文字ずつに分割する方法

前に英数字の全角と半角の変換をPower Appsで作った際、「入力文字列を1文字ずつに分割する」という操作を入れたのですが、それをPower Automateでもできないかと思って試したのでご紹介です。

Power Appsだと、 Split(文字列, "") で簡単に配列化することができるのですが、 Power Automateでも同じように split(文字列, '') としてみると・・・
image.png
このように、分割してくれないのです。

文字列を1文字ずつに分割する

ではどうするかというと、substring関数を利用します。
substring関数は、与えられた文字列の、N文字目からM文字を取り出すという関数です。
例えば

substring('HelloWorld',2,3)  --> llo

こんな風に文字列を抽出できます。注意しなければいけないのは、「N文字目」が0から始まるところです。

ここだけ気を付ければ、任意の文字列を1文字ずつに分割するにはsubstring(文字列,N,1)とすればいいとわかります。
反復処理でApply for each を使ってもいいのですが、1アクションで済ませることができるので、そちらを紹介します。

Select + range + substring

何か決まった規則で配列を作るときはSelectアクションが有効です。このアクションの詳細はShibateaさんの投稿をご覧ください。

今回の方法では、Selectの入力として、rangeを利用します。
※rangeはrange(N,M)で、NからM個の整数列を返す関数 ex: range(2,3) --> [2,3,4]

image.png
まずはrange関数で、0~入力文字の長さ分だけ整数の配列を用意しました。
Hello Worldの例では、空白も含めて [0,1,2,3...,10]の配列が生成されます。

次にSelectアクションのMapですが、ここは前の投稿で紹介した手順を用います。
中に入れる数式は

substring(variables('InputString'), item(), 1)

です。
この場合のitem()は、[0,1,2,3,...,10]の各数字になります。つまり、
[0文字目から1文字, 1文字目から1文字, 2文字目から1文字....,10文字目から1文字]
という配列が、この数式で返されるわけです。

実際動作させてみると、
image.png

無事1文字ずつに分割できました!

入力の文字列を除いて、なんと1アクションです!!
image.png

これを利用すると全角半角変換の対象文字列を1文字ずつに分割して、変換できるんです。

まとめ

Power Automateでは・・・
- split関数の分割では、空文字での分割は不可
- substring関数を使うと、文字列を部分的に抽出できる
- rangeは賢い
- Selectすれば配列を簡単に作れる

あまり使いどころもないかもしれませんが、空文字("")での分割がしたくなったら試してみてください!

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
What you can do with signing up
16