はじめに
株式会社メディアテック所属の @mt-h2 です。
普段は OutSystems を利用したローコードでシステム開発を行っています。
今回は実装時にハマった小ネタになります。
対象バージョンは OutSystems 11 となります。
何があった
OutSystems の TextAPI に用意されている String_Split
こちらを利用しようとしたところでハマりました。
公式ドキュメントでは、引数の Delimiters について以下のように記載されています。
Contains all the characters that should be considered as separators.
DeepL翻訳したところ、以下となりました。
区切り文字とみなされるすべての文字を含む。
んん?
当初この意味がよく分からず、まぁいいかと気にせずいました。
実装では以下のような文字列に対して、「区切り文字列」の前後の文字を取得しようとしていました。
- 最初の文字列区切り文字列最後の文字列
- 最初の文字列
- 最後の文字列
- ↑この2つを取得したい
まずは何も考えず以下のようにしました。
この結果、以下のようになると予想していました。
・String_Split.List[0].Text.Value = "最初の文字列"
・String_Split.List[1].Text.Value = "最後の文字列"
しかし、実際は以下のようになりました。
・String_Split.List[0].Text.Value = "最初の文字列"
・String_Split.List[1].Text.Value = ""
・String_Split.List[2].Text.Value = ""
・String_Split.List[3].Text.Value = ""
・String_Split.List[n].Text.Value = ""
・String_Split.List[LastIndex].Text.Value = "最後の文字列"
何故か空文字の配列が複数あります。
諸々調べたところ、Delimiters に指定した文字はその文字列を1つの塊として Split されるのではなく、指定した文字列を1つずつ Split する挙動のようでした。
上記で言うと、区 で Split、切 で Split、 り で Split... と実行されているようです。
これにより謎の空文字配列が生成されていました。
ここで改めて公式ドキュメントを確認すると、この説明の意図する事がそこにあったのだと理解しました。
ニホンゴムズカシイ...
これを前提に、今回は以下のように区切り文字を1文字に Replace したうえで Split する事で対応しました。
あとがき
理解の難しい公式ドキュメント(某msdn等)が多々ありますが、理解していたつもりがこう言った状態に陥る事があるので少しでも理解できない事があれば、実装前にサッと検証すべきだと思った寒空でした。
さいごに
株式会社メディアテックでは絶賛 開発メンバを募集中 です。
ローコード開発だけではなく、RPAやBIエンジニア諸々多数の募集をしておりますので、みなさまのご応募をお待ちしております。