改行区切りの値を返す関数の注意点

Claris FileMaker では改行区切りのテキストを扱う場面が多いと思います。
今回は改行区切りを扱う関数の特性を確認します。

改行区切りテキストを扱う際の注意点

Claris FileMaker の集計や関数などで取得できる改行区切りのデータでは特に、最後に改行文字が必ず付与されるのか、されないのかを意識する必要があります。意識せずに処理をすることで以下のような問題が起こることがあります。
Substitute関数 を利用し改行区切りコードを “,”に置き換え、JSON の配列を記述しようとした場合。
"[" & Substitute ( "1¶2" ; "¶" ; "," ) & "]" 結果は "[1,2]" になりますが、改行区切りの末尾に¶が有った場合、結果は [1,2,]となってしまい配列として成立しません。

関数を知ることで意図しない改行を防ぐ

改行区切りテキストを扱う関数を利用する際には、改行がどのように扱われるかを理解しておくことが重要です。これにより、計算式やスクリプト記述の際に値がどのようなデータになっているかを把握することができます。よく使われる関数について確認しましょう。

ValueCount

値のそれぞれの末尾に、改行が付いたものを1行として数えます。例2のように最後の行の末尾に¶が無い場合でも1行と判定されます。
例1) ValueCount ( "1¶2¶" ) 結果は"2"
例2) ValueCount ( "1¶2" ) 結果は"2"
ちなみに、次の例では値の2行目が¶のみとなりますが、空行となり1行と判定されるため、結果は3になります。
ValueCount ( "1¶¶2" ) 結果は"3"

List

改行区切りのテキストを結果として返します。結果の末尾には改行がありません。
List( 1 ; 2 ; 3 )     結果は"1¶2¶3"

GetValue

指定した行の値を結果に返します。結果の末尾には改行があっても取り除かれます。
GetValue ( "1¶2¶3¶" ; 2 )     結果は"2"

FilterValues

フィルタ値で指定した値を返します。元々の値に改行が含まれていなくても、結果の末尾には改行が付与されます。
FilterValues ( "1¶2" ; 2 )     結果は"2¶"

LeftValues     MiddleValues     RightValues

LeftValues は左から指定した行の値を返します。元々の値に改行が含まれていなくても、結果の末尾には改行が付与されます。MiddleValues , RightValues も改行区切りの扱いは同じです。
LeftValues ( "1¶2" ; 2 )     結果は"2¶"

UniqueValues       SortValues

UniqueValues は改行区切りテキストから重複する値を除いたものを結果として返します。 元々の値に改行が含まれていなくても、結果の末尾には改行が付与されます。SortValues も改行区切りの扱いは同じです。

JSONListValues     JSONListKeys

JSONデータを改行区切りテキストとして返します。結果の末尾には改行がありません。関数名に Values と有るものは、元の値に関係なく結果の末尾に¶が入るものがほとんどですが、 JSONListValues と JSONListKeys は例外となり、末尾に¶が付きません。
JSONListValues ( "[1,2]" ; "" )          結果は"1¶2"

LocationValues     RangeBeacons

LocationValues で取得した値の末尾には改行が付きません。RangeBeaconsについては検証していません。ヘルプにも記載がなかったので、ご興味の有る方は調べて見てください。

s で終わるデザイン関数

BaseTableIDs BaseTableNames DatabaseNames FieldBounds FieldIDs FieldNames FieldRepetitions LayoutIDs LayoutNames LayoutObjectNames RelationInfo ScriptIDs ScriptNames TableIDs TableNames ValueListIDs ValueListItems ValueListNames WindowNames は、末尾に¶が付きません。

フィールドタイプ「集計」の「一覧」

関数ではありませんが、フィールド作成で集計タイプを選択し、一覧を設定した場合。結果の改行区切りリストの末尾には¶が付きません。

まとめ

Claris FileMaker での改行区切りテキスト処理は次の通りになります。
・テキスト関数の関数名に***Values とあるものは、結果の末尾に¶を含む(ただしJSON関数の JSONListValues は¶が付きません)
・JSONListKeys や *******sで終わるデザイン関数の末尾には¶が付きません
・フィールドタイプ「集計」の「一覧」には¶が付きません

末尾の改行の有無は、見た目では判別が難しいため、開発の際見落としがちなところだと思います。関数の性質や、デバッグを利用し、効率的で正確なシステム開発を目指しましょう。

=====
最近、以下のリンク先へのアクセスを増やしたいと考えており、流入量が多いほどブログの価値が向上するため、ますます投稿を加速させていきたいと思います。リンク先を開いていただけると大変助かります。
Claris International Inc. (日本語)
ご協力いただけましたら幸いです。
=====