「電話番号の数字を取得したいんです。
でも、最初の0(ゼロ)がGetAsNumberだと取得できないんです。」
ウンウン、そうだね、取得できないね。
「え、だって、数字を取得するのって、GetAsNumberだから、これでいいんですよね?」
え、だって、数字で最初の0って認識されないっしょ。
「あー、、、、なんで?」
え、(会話がループ)
FileMaker業界にかかわらず、システム業界に来たばかりの新人さんと会話するとこんな会話に遭遇することが何回かありました。
結論から言うと、2つのポイントがあります。
最初から結論
1.電話番号や会員番号など、はじめに"0"をつけたデータが存在する使用の場合は、テキストタイプのフィールドにしましょう
2.最初のゼロを含んだ数字は、テキストとして処理しましょう
サンプルで現象を確認してみる
「つまりは、数字があるテキストなんだよ」
と言う極論なんですが、下のサンプルを見ていきましょう。
このサンプルでは、テキストと数字タイプの二つのフィールドを設置しました。
GetAsNumberで数字を取り出した場合
テキストフィールドの電話番号を、GetAsNumberで数字を取得する計算式を計算フィールドに設定しました。
この時、忘れがちですが、「計算結果」も得たい結果に合わせることを忘れないでください。
次に、数字フィールドの電話番号を、GetAsNumberで数字を取得する計算式を計算フィールドに設定してみます。
この計算フィールドの計算結果は「数字」に設定します。
レイアウトでは、数字フィールドの表示もコントロールしておきます。
何も設定しない「一般」だと、指数で表示されます。
さて、結果です。
見事に、最初の"0"が抜かれてますね。
きっと相談しに来た新人さんも、こういう現象のことを言いたかったんでしょう。
こうすると"0"が取得できるよ
色々とやり方はあると思いますが、オーソドックスな方法を二つ紹介します。
やり方1:固定の文字を削除する
もし、会員番号や電話番号のように数字以外の文字が固定されている場合(例:"-")は、Substitute関数で数字以外の固定の文字を削除するやり方があります。
この時も、計算結果をテキストにするのを忘れずに。
やり方2:数字だけを取り出す
数字以外の文字が複数ある場合は、やり方1とは逆の発想で、Filter関数で数字だけを取り出します。
この時も、計算結果をテキストにするのを忘れずに。
結果、、、
これらのやり方で実装すると、きちんと"0"が最初についたデータを抽出できていますね。
FileMakerに限らず、プログラミング言語を使った開発は、どれだけ手(この場合は関数)を知っているかがつまづかない実装の一つです。
インプットはたっぷりし、そのたっぷり入ったインプットがどこで使われると効果的なのかをたくさんアウトプットして覚えていってくださいね。(自分含め。。。)