FileMaker Advent Calendar 2015の4日目
フィールド内改行問題について考える
FileMakerを始めた頃、うっかりハマることが多いフィールド内改行問題について考えてみる
フィールド内改行問題とは?
フィールドにカーソルを入れたときに
こうなるのが正しいのに
こうなってしまう
それフィールド内改行問題が起きてますよ
フィールド内改行問題で一番困るのは?
データを書き出した時に困ります
1行目がフィールド内改行問題が起きているレコード
見た目は同じに見えても、まったく違うデータになってしまっています
赤枠に囲われた0Bは文字であって文字ではない(ASCII制御文字)なので、通常は表示されないので気づきません
どうすればいい?
フィールド内改行問題を起こさないためには
- フィールド内で改行キーを受け付けなければいい
- もしフィールド内に改行が入ったら影響が無いように置換してあげればいい
対策:フィールド内で改行キーを受け付けなければいい
インスペクタで改行を許可しないフィールドで
こうなっているのを
こうすれば、フィールド内で改行されずに次のタブ順に設定されているレイアウトオブジェクトに遷移するので、改行は入りません
気を付けないといけないのはフィールドの値をコピペした場合、コピペした値に改行コードが入っていた場合はフィールド内改行問題が残ります
あくまでもユーザーのキー入力を抑止する機能でしかありません
対策:もしフィールド内に改行が入ったら影響が無いように置換してあげればいい
Substitute関数を使って改行コードを置換します
Substitute関数
目的
テキスト内にあるすべての検索テキストの文字列を、テキスト内で置換テキストに置換したテキスト文字列を返します。
構文
Substitute ( テキスト ; 検索テキスト ; 置換テキスト )
フィールドのオプションの「入力値の自動化」の「計算値」に
Substitute ( フィールド名 ; "¶" ; "" )
を設定してあげればいいでしょう
都度フィールド名を指定するのが面倒ならSelf関数を使えばコピペ対応できます
Self関数
目的
計算式が定義されているオブジェクトの内容を返します。
構文
Self
これを使って
Substitute ( フィールド名 ; "¶" ; "" )
の代わりに
Substitute ( Self ; "¶" ; "" )
とすると、どのフィールドでも同じ式で対応できます