LoginSignup
5
7

More than 3 years have passed since last update.

Power Automateで、配列の先頭からN個、末尾からN個要素を取得する (take,skip)

Last updated at Posted at 2020-03-09

FirstN,LastN

コレクションやテーブルから最初のN要素、最後からN要素を取得する関数がPower Appsでは用意されています。
それがFirstN、LastNです。名前もそのままなのでわかりやすいですね。

一方で、Power Automateではというと、first関数、last関数はありますが、firstN、lastNはその名前では存在しません。
今回はPower AppsでのFirstN、LastNに対応するような関数を紹介します。

そもそもどういうときに使おうか

たとえばPower Automateの文脈で私がよく使うとすれば、以下のようなHTMLを分解してデータ化するときです。

sample.html
<table style="width:100%">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Age</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td>
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>
    <td>94</td>
  </tr>
</table>

このテーブルをデータにするために、素直にやるのが、trでsplitして、得られた配列をさらにtdでsplitとします。ここで余分なのは、最初のtrでsplitしたときの先頭です。

split結果は以下のような配列になります。(見やすさのために改行コードは取り除いてあります)

[
  "<table style=\"width:100%\">",
  "<th>Firstname</th><th>Lastname</th><th>Age</th></tr>",
  "<td>Jill</td><td>Smith</td><td>50</td></tr>",
  "<td>Eve</td><td>Jackson</td><td>94</td></tr></table>"
]

一目瞭然、最初に余分な要素がありますね。これを取りのぞきたい!

また各行を今度はtdでsplitしますが、その際には、

[
  "<td>Jill",
  "<td>Smith",
  "<td>50",
  "</tr>"
]

今度は最後に余計な要素が入っている。。。

このような、最初の1行が不要/最後の1行が不要 のような場合に、使える関数がtake()skip() です。

take = 最初のN要素を取得する

実際は文字列も対象とできるのですが、割愛します。
take関数は配列の先頭N要素を取得する関数です。先ほどの配列["<td>Jill","<td>Smith"...] のケースでいえば、

take(....,3)

と書くことで、最後の1つ余分な要素を除外できます。結果以下のような配列が得られます。
image.png

もし一般的に書きたい場合には、

take([元の配列], sub(length([元の配列]),1))

このように書けば、最後の1つを取り除いた結果が任意の行数の配列で得られます。

skip = 最後のN要素を取得する

引数の指定は少し違いますが、大体意味は同じです。
skip関数は配列の先頭M個をスキップした(取り除いた)結果を返します。

skip(createArray(0,1,2,3),2) --> [2,3]

ですね。
LastNと同じように、最後からN要素を指定したい場合には、skipの2個目の引数として

sub(length([元の配列]),N)

を与えればよいです。
最初の配列ではもっと単純に最初の1要素を飛ばしたいので、skip(...,1)とします。

[
  "<table style=\"width:100%\">",
  "<th>Firstname</th><th>Lastname</th><th>Age</th></tr>",
  "<td>Jill</td><td>Smith</td><td>50</td></tr>",
  "<td>Eve</td><td>Jackson</td><td>94</td></tr></table>"
]

結果は
image.png

目的の配列が得られました。

補足

最初のHTMLのテーブルですが、skipとか使うときれいにデータ化できます。(このくらい簡単な場合にはxml化してもよいですが)
image.png

5
7
0

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
  3. You can use dark theme
What you can do with signing up
5
7