メールアドレスをローカルとドメインに分離する

NO IMAGE

メールアドレスを入力するのに、「sample@example.com」とあったとすれば、
・sample
・@example.com
に分離すれば、次にまた「○○○@example.com」の人が出てきた場合、後ろのドメイン部分をオートコンプリートできるんじゃない?と考えたわけだ。
最近のファイルメーカーはフィールド設定で「入力済みの値を利用してオートコンプリート」というオプションを選べるんだけど、日本語の場合は確定しないとこれが動かない。
「日本太郎」と入力したいのに
「日」
「日本」
「日本太」
などと一文字変換しては確定して、オートコンプリートできるかどうか待つというのも馬鹿な話で、あんまり実用的じゃない。
でもメールアドレスなら、確実に半角英数字である。変換しなくていい。
それなら、オートコンプリートも実用的だ。
ということで住所録のメールアドレスは前と後ろで入力を分けて、後で「前&後ろ」みたいな計算フィールドを作ればいいじゃないと考えた。
しかしこれまで蓄積してきたレコードは、普通に「sample@example.com」の形で入力済である。
そこで、こいつらを分離するのはどうしたらいいか。
最初考えたのが、次の計算式。
元々のメールアドレスが蓄積されているフィールドが「メール」という名前だと思ってください。
ローカル部分を抽出する計算フィールド:
Middle ( メール ; 1 ; Position ( メール ; “@” ; 1 ; 1 ) – 1 )
ドメイン部分を抽出する計算フィールド:
Substitute ( メール ; アドレス前方抽出 ; “” )
これでいいじゃん、と思った。最初は。
前方部分は「@」までのテキストを抽出し、後方部分は元のアドレスデータの、前方部分を空白で置換する。
ところがこれ、「sample@sample.com」みたいなアドレスだとダメでした。ドメイン部分が「@.com」になっちゃう。
つまりローカルが「sample」だから、全部とっぱらっちゃうんだね。
そこで改良して、
ドメイン部分を抽出する計算フィールド:
Right ( メール ; Length ( メール ) – Length ( アドレス前方抽出 ) )
にしました。元のアドレスの文字数を出して、単純にローカル部分の文字数を差し引いた分、アドレスの右から抽出する。
何か問題あるかもしれないけど、とりあえず今日はそんな感じ。