AppSheet実践編シリーズ㉘~(小ネタ)(IT初心者向け)改行を置換する~
はじめに
こんにちは。ソシオネットの髭晩酌です。
お客様先にお伺いする際のランチですが、私はその最寄り駅の立ち食いそばで済ます事が多いです。今日も外出だったので現地でそば屋さんを探していたところ、去年閉店した美味しい立ち食いそば屋さんが、なんと!復活しているのを見つけました!!(ちなみに食べログ上でも閉店のステータスのまま。。。)
ってことで、今年はなんだかいいことがありそうです。
さて、今回のテーマは「改行の置換」です。※最近「さて」から始めるブログしか書いてない。ボキャ貧。。
今回は小ネタなので、いきなり本題から書きます。
今回のブログのオチとしては、「改行が邪魔な場合は置換して消そうぜ!」ということなのですが、IT初心者の方向けに「そもそも改行とは?」的な話にも少しだけ触れながらお話していきます。
※改行については突き詰めるとかなり専門的な話になりますが、ここではそんな難しい話はしません。
※オチだけ知りたい人は、最後だけ読んでくれればOKです。
「半角スペースっぽいやつ」がいる!
早速ですが、以下のアプリを見てください。LongText型(項目名:ロングテキスト)とText型(項目名:1行テキスト)の項目が並んでおり、1行テキストの項目のFORMURAに以下の関数を入れただけのアプリです。
[ロングテキスト]
Text型の項目では改行できないので、改行が含まれるLongText型の文字列をText型に入れると、改行部分が「半角スペースっぽいやつ」に置換されて表示されます。
これが「Text型の項目に含まれる改行」になります。
「Text型の項目に含まれる改行」は「半角スペース」ではない
例えば、この桃太郎の冒頭部分から「おじいさん」という文字列を抜き出したい、という要望があったとします。
ちょっとITに携わったことがある人は、「あるところに」と「とおばあさん」に挟まれている文字列を抽出すればいい、と考えることが多いと思います。
ちなみに、今回のようにある2つの文字列に挟まれている文字列を抽出するやり方は、AppSheetだと、例えばOCRTEXT関数で画像から抽出した文字列から一部の文字列だけ抽出する、みたいな場合によく使うテクニックかもしれません。
ということで、以下の関数を書いてみました。
SUBSTITUTE(
MID(
[1行テキスト],
FIND("あるところに", [1行テキスト]),
FIND("とおばあさん", [1行テキスト])-FIND("あるところに", [1行テキスト])
),
"あるところに",
""
)
いつもの通り、SUBSTATUTE関数とMID関数に分けて考えてみます。
まず①のMID関数ですが、「あるところに」の位置(第二引数)から「とおばあさん」までの長さ(第三引数)の文字列を取得する、という意味です。
理解の補足として以下の絵を描いておきます。
ということで、MID関数の結果「あるところに おじいさん」という文字列が返ることが分かりました。
次に②のSUBSTATUTE関数ですが、MID関数の結果返ってきた「あるところに おじいさん」という文字列の中にある「あるところに」を空文字に置換する、という意味です。
結果として、上記の関数は「 おじいさん」という文字列を返します。当たり前ですが、「Text型の項目に含まれる改行」は消えません。
では次に、以下の関数を試してみます。SUBSTATUTE関数の引数を「あるところに 」(あるところに、の後に半角スペース)にしてみました。「Text型の項目に含まれる改行」が「半角スペース」であるならば、これでうまくいくはず。
SUBSTITUTE(
MID(
[1行テキスト],
FIND("あるところに", [1行テキスト]),
FIND("とおばあさん", [1行テキスト])-FIND("あるところに", [1行テキスト])
),
"あるところに ",
""
)
結果は「あるところに おじいさん」です。期待通りの結果になりませんでした。これより「Text型の項目に含まれる改行」は、見た目は半角スペースだけど実際は半角スペースではない、ということがわかります。
結論:改行を消すには?
ここまでで、Text型の項目に含まれる改行は半角スペースではないということがわかりました。では、今回のような場合はどうやって改行を消せばよいのでしょう?
答えは以下の関数です。
※前述のMIDとSUBSTITUTEの組み合わせ関数に入れるのが面倒なので、改行を空文字に置換する関数だけにしました。
SUBSTITUTE( [1行テキスト], "
", "")
まさに、「改行を空文字で置換する」です。第二引数で改行を指定しているのですが、まさに改行そのもの。。
また、インデントもいろいろ試しましたが、改行の部分がどうにもならないので、可読性が最悪です。。これならやらないほうがよさそう。
SUBSTITUTE(
[1行テキスト],
"
",
""
)
この項の冒頭で、「前述のMIDとSUBSTITUTEの組み合わせ関数に入れるのが面倒なので」と言った理由、分かってもらえたと思います。。。
そして今回のように、改行が含まれる文字列があって、そこからある2つの文字列に囲まれた部分を抽出したい場合は、まず仮想項目(Virtual Column)を作ってその中で改行だけ空文字に置換した上で、その仮想項目に対してMIDやSUBSTITUTEで必要な文字列を抜き出す、、ってやり方が個人的にはよいと思ってます。(可読性が悪い部分は仮想項目の定義の中に隠しちゃおう、っていうコンセプトです)
もっと良い方法を思いついた方は教えてください!
終わりに
本ブログでは、「改行の置換」について説明しました。
見た目は半角スペースなのに実際は半角スペースではない、、という、IT初心者を悩ませる改行について、少しでも理解が深まったならば幸いです。
また、例えばLEFT関数やLEN関数など、文字列の文字数に関連する関数を使う際に、改行が悪さをして想定通りの動きをしない場合もあるので注意しましょう。
ということで、今回のブログは以上となります。ではまた次回ブログでお会いしましょう!ルネッサーンス!!
AppSheet勉強会を開催しております
弊社主催のAppSheet勉強会を毎月開催しております。直近開催分のお申込みは以下からお願いいたします。
※初めての方は、初心者向けかんたんハンズオン勉強会から参加されることをお勧めします。
2/12(水)【2月は第2水曜開催】AppSheetを知ろう!初心者向けかんたんハンズオン勉強会! | Peatix
2/18(火)【毎月第3火曜開催】実践的なスキルが学べる!AppSheetアプリ開発ワークショップ | Peatix
IT内製化支援、Salesforceの運用・導入、DX化推進に関するご相談をお待ちしております
弊社では、ノーコード開発ツールを用いたIT内製化支援、Salesforceの運用・導入、および、DX化推進に関するご相談を承っております。お気軽に弊社お問い合わせサイトよりご相談などをお寄せいただければと思います。
ソシオネットHP:http://www.socionet.co.jp/
対話型定額制アプリ開発サービス「DXデビュー」:https://socionet.co.jp/dxdebut/
IT内製化支援支援サービス「DXオープンラボ」:https://socionet.co.jp/insourcing-support-service/
IT運用とDX化のワンストップサポートサービス「DXサポーターズ」:https://socionet.co.jp/dx-supporters/