みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
作成:FM12Ad
使用:FMS13,FM12,FM13
グローバルフィールドに検索値を入力してボタンをクリックすると検索するスプリクトを作っていて
エスケープ文字を付ける必要のある文字が入力されていればエスケープ文字を追加する処理を行いたいと思っています。
検索時にエスケープ文字を付ける必要のあるものは、ヘルプに記載されている
@ * # ? ! = < > "
だけでしょうか?
もし他に何かあれば教えて下さい。
よろしくお願いします。
Offline
エスケープ文字自体と、~は?
検索演算子を使わせないには、Quote(入れた値)でできないかな。
回答ありがとうございます。
エスケープ文字自体と~を試しに検索してみましたが、エスケープしなくても普通に検索できるみたいですね。
Quote関数は詳細を読んだことがなかったので""で囲んで返すだけかと思っていましたが、エスケープもしてくれるんですね。
いちいちSubstitute関数で置き換えようかと思っていました……。
Quote関数を使ってしばらくテストしてみたいと思います。
ありがとうございました。
一旦解決とさせていただきますが、もし他にも思い当たるものがある方がいらっしゃればコメントよろしくお願いします。
Offline
"~"のように入力値を""で囲んでから検索するということですよね。
¥を検索するのに、¥のままなら検索できたけど、"¥"ではだめでした。"¥¥"だと見つかる。
閉じる"が無くてもエラーにならなかったり、計算式とは違ってややこしい。
追加の情報ありがとうございます。
今のところQuote関数で上手くいっています。
スプリクトを使わずに検索する場合にどうなるのかちょっと気になったのでいろいろと試してみた結果、↓のようなことがわかりました。(Win8.1,FMP12Adで検証)
1.特殊記号がテキスト中にある場合、その記号の前の文字は後方一致検索で末尾の文字として扱われ、次の文字は前方一致検索で最初の文字として扱われる(重複を検索する場合は特殊記号はそれぞれ区別される)
例1:「*b」で検索→「abc」は表示されないが、「ab@c」「ab¥c」は表示される
例2:「c」で検索→「abc」は表示されないが、「ab@c」「ab¥c」は表示される
2.「"」は閉じるものがなくても検索できるし、テキスト中に単体で余分に入っても検索できるが、記号単体では検索できない(「"」が連続した場合、偶数個目の「"」は検索値として扱われる)
例1:「"ab"c"d"」で検索→「ab"cd」「ab""cd」は表示されないが、「abcd」「"abcd」は表示される(おそらく「abcd」が検索値になる)
例2:「"ab""c"d"」で検索→「abcd」「ab""cd」「"abcd」は表示されないが、「ab"cd」は表示される(おそらく「ab"cd」が検索値になる)
例3:「"ab"""c"d"」で検索→「abcd」「ab""cd」「"abcd」は表示されないが、「ab"cd」は表示される(おそらく「ab"cd」が検索値になる。「"x"」のように""で囲われた「"」扱い?)
例4:「"ab""""c"d"」で検索→「abcd」「ab"cd」「"abcd」は表示されないが、「ab""cd」は表示される(おそらく「ab""cd」が検索値になる。「"xx"」のように""で囲われた「""」扱い?)
例5:「"ab"""""c"d"」で検索→「abcd」「ab"cd」「"abcd」は表示されないが、「ab""cd」は表示される(おそらく「ab""cd」が検索値になる。「"x"x"」のように""で囲われた「"」が2つの扱い?)
例6:「"」で検索→一致なし(該当フィールドが空欄のレコードがある場合も何も一致しない。何が検索値として扱われるのか不明)
例7:「*"」で検索→「abcd」「ab"cd」「ab""cd」「"abcd」すべて表示される(該当フィールドが空欄のレコードがある場合は表示されない)
例8:「""」で検索→「abcd」は表示されないが、「ab"cd」「ab""cd」「"abcd」は表示される(おそらく「"」が検索値になる)
3.「¥」の次に何か文字がある場合、「¥」は必ずエスケープ記号として扱われる(「¥」が連続した場合、偶数個目の「¥」は検索値として扱われる)
例1:「¥」で検索→「abc」は表示されないが、「¥abc」「¥¥abc」「abc¥」は表示される
例2:「¥¥」で検索→「abc」は表示されないが、「¥abc」「¥¥abc」「abc¥」は表示される(おそらく1つ目の「¥」は2つ目の「¥」に対するエスケープ記号として扱われている)
例3:「¥¥¥」で検索→「abc」「¥abc」「abc」は表示されないが、「¥¥abc」は表示される(おそらく1つ目がエスケープ記号となって2つ目を検索値として扱い、3つ目は次の文字がないため検索値として扱われたため「¥¥」が検索値になっている)
例4:「¥¥¥¥」で検索→「abc」「¥abc」「abc」は表示されないが、「¥¥abc」は表示される(おそらく1つ目と3つ目がエスケープ記号となって、2つ目と4つ目を検索値として扱っている)
例5:「¥abc」で検索→「abc」「¥abc」「¥¥abc」「abc¥」すべて表示される(おそらく「¥」が「a」に対するエスケープ記号として扱われている)
例6:「abc¥」で検索→「abc」「¥abc」「¥¥abc」は表示されないが、「abc¥」は表示される(おそらく次の文字がないため「¥」は検索値として扱われている)
特殊記号が混ざるとなかなか難しいですね……。
Last edited by にしなな (2015-03-26 19:53:42)
Offline
Pages: 1
[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 561.41 KiB (Peak: 581.36 KiB) ]