2017年8月16日水曜日

LogicFlow で指定した桁数以降の文字列を取得する

今回はちょっとした小ネタです。文字列を色々扱う機会は多いと思いますが、その中でも「指定した桁数以降の文字列」を取得したいケースはそれなりにあるので、方法としてまとめておきます。


LogicFlow で用意されている関数を複数組み合わせて利用するのですが、普段プログラムを書いている人だとはまる点が一つだけあります。

image

全体としては、上記のような LogicFlow で挙動を確認しています。上で表示されているのは、一つ目の作成コネクタで指定している関数です。先に定義した変数 testVal の先頭( 0 桁目)から 7 文字取得しています。ここはよくある使い方で特に問題はありません。

image

対して二つ目の作成コネクタでは、4 桁目以降を取得、ということをやろうとしています。普段プログラムを書いている方でしたら、

hogehoge.substring(4, hogehoge.length – 4)

というように、全体の文字数を求めそこから開始位置の桁数を引くことで、指定桁数以降の文字列が取得できるというのをすぐに思いつくのではないでしょうか。

これを LogicFlow にそのまま書こうとすると、次のような形になります。

@substring(variables('testVal'),4, length(variables('testVal')) - 4 )

substring 関数で部分的に文字列を取得する際に、開始桁数を例えば 4 と固定で指定し、取得する文字数を length 関数で全体の桁数として取得し、そこから 4 を引くことで末尾までの文字数を算出し、それを substring 関数に指定する、というよく見るやり方です。ところが、これは LogicFlow 上では構文エラーとなります。

それは、関数の中に計算式を含めることができない、という LogicFlow の仕様によるものです。

そのため、先の画面のように、

@substring(variables('testVal'),4,sub(length(variables('testVal')),4))

と、length 関数で求めた桁数に対して sub 関数で減算を行う必要があります。

普段プログラムをしていない方でしたらおそらくすぐに上記の書き方にたどり着けるのでしょうが、逆にプログラムを書いている人間だと「?」となってしまう点でした。

0 件のコメント:

コメントを投稿