みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
ファイルメーカーの検索フィールドを設けてキーワードを検索し、検索されたキーワードを太文字にしたいのです。
やりたいこと:検索フィールドにAAAAAと入れると、内容のフィールドでAAAAAの文字が太字で表示される。
下記にソースコードを書きました。検索はされますが、内容欄で文字が太くなりません。
何度か修正を行っています。ソースコードを変更しました。
また、ネットで検索もしましたが、わかりませんでした。アドバイスをいただけないでしょうか。
どうぞよろしくお願いいたします。
フィールド設定[タスク::がいよう]Substitute (TextStyleRemove ( TextSizeRemove ( TextColorRemove ( タスク::がいよう);40);太字) ;タスク::クイック検索|iPad ; TextStyleAdd(TextSize (TextColor(タスク::クイック検索|iPad ; RGB (255 ;0 ; 0));40 );太字) )
Last edited by kirari (2019-07-21 20:52:37)
Offline
Let (
target = "AAAAA" ;
Substitute ( フィールド ; target ; TextStyleAdd ( target ; 太字 ) )
)
のようにして見ては
Offline
挙げていただいたステップだけではわからないと思います。
フィールド設定を行なっていますが、たとえば検索結果の対象レコードが複数だったときはどういう処理をしていますか?
対象レコードのすべてについてフィールドを更新しないと内容欄の書式は変わらないと思います。
Offline
Shin様
Let (
target = "AAAAA" ;
Substitute ( フィールド ; target ; TextStyleAdd ( target ; 太字 ) )
)
のようにして見ては
太文字にすることができました。ありがとうございます。
Offline
koeda様
挙げていただいたステップだけではわからないと思います。
フィールド設定を行なっていますが、たとえば検索結果の対象レコードが複数だったときはどういう処理をしていますか?
対象レコードのすべてについてフィールドを更新しないと内容欄の書式は変わらないと思います。
ありがとうございます。データが1000件近くあり、Loop文で回そうと思っていますが、
Loop
Let ( target = "タスク::クイック検索|iPad" ;Substitute ( タスク::内容概要 ; タスク::クイック検索|iPad ; TextStyleAdd ( タスク::クイック検索|iPad ; 太字 ) ))
Exit Loop IF
End Loop
を書きましたが、動きません。
もしよろしければアドバイスいただけないでしょうか。
Offline
また、別のキーワードを検索する場合に
検索フィールドに残っているキーワード「AAAAA」を消すと、太字になったキーワードが元に戻る(元のフォントに戻る)にはどうしたらよろしいでしょうか。
Offline
Loopの使い方はスクリプトの基本なので、ヘルプの例をじっくりご覧になってマスターしてください。
https://fmhelp.filemaker.com/help/18/fm … /loop.html
あと、Let()は変数やフィールドに値を設定するための計算式を自在に記述できる関数ですが、
スクリプトの中に直接書くことはできません。
フィールド設定[ フィールド名 ; Let(....) ]
変数を設定[ $変数 ; Let(...) ]
のように使います。
https://fmhelp.filemaker.com/help/18/fm … 2Flet.html
Last edited by koeda (2019-07-22 10:00:59)
Offline
また、別のキーワードを検索する場合に
検索フィールドに残っているキーワード「AAAAA」を消すと、太字になったキーワードが元に戻る(元のフォントに戻る)にはどうしたらよろしいでしょうか。
やり方はいくつかあると思いますが、すぐに思いつく方法としては、
1)検索フィールドにスクリプトトリガを設定し、フィールドが""だったらタスク::がいようのフィールドの書式をRomoveするスクリプトを起動
2)「タスク::がいよう」フィールドに、検索フィールドが""だったら書式をRomoveした自身の値を再設定する、という計算式を設定する
とりあえず1)の方がわかりやすいですかね?
Offline
Loopしないでも、
フィールド内容の全置換
でいいのでは。
キーワードを消した後に、
必ず入力、検索を行うのなら、
その検索スクリプトで書式等消せばいいでしょう。
Offline
koeda様
アドバイスありがとうございます。
Loopの使い方はスクリプトの基本なので、ヘルプの例をじっくりご覧になってマスターしてください。
https://fmhelp.filemaker.com/help/18/fm … /loop.htmlあと、Let()は変数やフィールドに値を設定するための計算式を自在に記述できる関数ですが、
スクリプトの中に直接書くことはできません。
フィールド設定[ フィールド名 ; Let(....) ]
変数を設定[ $変数 ; Let(...) ]
のように使います。
https://fmhelp.filemaker.com/help/18/fm … 2Flet.html
下記のコードを書いたのですが、最後のデータだけ、文字が太字になりました。
途中のデータも文字が変わるようにするにはWriteのような構文を入れないといけないのでしょうか。
Letのアドバイスありがとうごうございます。
Offline
コードは以下のコードです。
レコード/検索条件/ページへ移動[最初の ]
Loop
フィールド設定[タスク::がいようLet (
target = "タスク::クイック検索|iPad" ;
Substitute ( タスク::内容概要 ; タスク::クイック検索|iPad ; TextStyleAdd ( タスク::クイック検索|iPad ; 太字 ) )
)]
レコード/検索条件/ページへ移動[次の;最後まで来たら終了:オン]
End Loop
Offline
検索のたびにレコードを書き換えるのは望ましくないので表示用に非保存の計算フィールドという手もあります。
この場合はスクリプトは不要です。
検索は元のフィールドに行えば検索時のパフォーマンスへの影響もそれほどないでしょう。
※表示のレイアウトがどうなるかですが長文をリスト表示ではないと期待して......
Offline
チポ様
コメントありがとうございます。以下のコードを書きましたが、最後のデータだけ太字になりました。
Writeの書き出し構文が必要なのでしょうか。
Loopしないでも、
フィールド内容の全置換
でいいのでは。
フィールド内容の全置換[ダイアログあり:オン;タスク::がいよう;Let (
target = "タスク::クイック検索|iPad" ;
Substitute ( タスク::がいよう ; タスク::クイック検索|iPad ; TextStyleAdd ( タスク::クイック検索|iPad ; 太字 ) )
)
Offline
> タスク::クイック検索|iPad
このフィールドはグローバルフィールドでしょうか?
でなければ、検索前に選択されたレコードのみに値があることになりますが。
Offline
チポ様
コメントありがとうございます。
グローバルフィールドになっていませんでした。チェックを入れて検索したら、太字に変換できました。
ありがとうございます。
例えばですが、キーワードが複数あった場合はどのようにすればいいのでしょうか。
> タスク::クイック検索|iPad
このフィールドはグローバルフィールドでしょうか?
でなければ、検索前に選択されたレコードのみに値があることになりますが。
Offline
キーワードが数個程度でしたら、
Let (
target1 = "AAAAA" ;
target2 = "AAAAA" ;
Substitute ( フィールド ;[ target1 ; TextStyleAdd ( target1 ; 太字 ) };[ target2 ; TextStyleAdd ( target2 ; 太字 ) })
)
のようにすればいいです。数が多ければ、スクリプトで何回かloopさせるか、再帰式で行うことになるでしょう。
計算フィールドで表示させるのがいいと思いますよ。
Last edited by Shin (2019-07-22 11:57:01)
Offline
Moz様
コメントありがとうございます。サンプル確認させていただきました。
文字を入力し、該当した時に表示される文字のコードはファイルメーカーにもともとあるのでしょうか。
スプリクトのコードを拝見しましたが、すみません、私の勉強不足でわからなかったので
ご教示いただけると幸いです。
検索のたびにレコードを書き換えるのは望ましくないので表示用に非保存の計算フィールドという手もあります。
この場合はスクリプトは不要です。検索は元のフィールドに行えば検索時のパフォーマンスへの影響もそれほどないでしょう。
※表示のレイアウトがどうなるかですが長文をリスト表示ではないと期待して......
Offline
分かりづらかったようですみません。
太字にして色を付ける目的ではスクリプトを使用していません。
以下の計算式で太字、色付けを行っています。
※他の皆さんの書かれているものと大差ありません。
もちろん標準機能です。
Let ( [
/* キーワードを変数にして参照を1回にする */
~キーワード = gt_キーワード
] ;
Substitute ( TextFormatRemove ( 本文 ) ;
~キーワード ; TextColor ( TextStyleAdd ( ~キーワード ; 太字 ) ; RGB ( 255 ; 99 ; 0 ) )
) // Sub
) // Let
スクリプトは検索を行っているだけです。無くても大丈夫です。
この手法の利点は太字・色付けの目的でレコードの書き換えを行わないことです。
訂正)改行入れなかったら式が見切れちゃいました。スンマセン。
Last edited by Moz (2019-07-22 12:41:39)
Offline
Shin様
ありがとうございます。やってみます。
Offline
Moz様
ありがとうございます。フィールドのコード、確認いたしました。
キーワードが複数出てきた場合、例えば、「人」+「藤原」というキーワードを入れた時、
両キーワードともに色は変えることができるのでしょうか。
Offline
その複数のキーワードはどのように入力されます?
複数のフィールド
一つの繰り返しフィールド
一つのフィールドの改行テキスト
等考えられますが、、
それで、
and 検索か、or 検索をするんですよね?
その検索スクリプトはできますか?
FMではスクリプトコマンド一つ一つをスクリプトステップといいます。
(ソース)コードとは言いません。
Offline
複数キーワードへの対応はShinさんが示しているので応用しましょう。
追加で質問されている内容の回答はここまでの流れで出ていますから応用してまずはやってみては如何でしょう。
答えそのものを写しても他のケースが出た場合にまた対応できなくなってしまいます。
チポさんが書かれている複数キーワードの入力手法がどうなっているかも重要ですね。
※クイック検索ならスペースは AND になりますがそれでは色々前提が崩れてしまいます。
可能であれば抽象的な表現でなく具体的な目標を示されては如何でしょう?
複数キーワード以外にも検索対象のフィールドも複数あるとかを後出しされるとアドバイスが難しいと思いますよ。
Let 関数
https://fmhelp.filemaker.com/help/18/fm … p/let.html
Substitute 関数
https://fmhelp.filemaker.com/help/18/fm … itute.html
ところでバージョンや環境はどのようになっていますか?
FileMaker Pro Advanced ならばデータビューアで計算式のテストができます。
Last edited by Moz (2019-07-22 13:41:34)
Offline
チポ様
その複数のキーワードはどのように入力されます?
複数のフィールド
一つの繰り返しフィールド
一つのフィールドの改行テキスト
等考えられますが、、それで、
and 検索か、or 検索をするんですよね?その検索スクリプトはできますか?
FMではスクリプトコマンド一つ一つをスクリプトステップといいます。
(ソース)コードとは言いません。
検索キーワードのフィールドにキーワードを1個もしくは複数入れて、1000以上あるフィールド(改行したテキスト)にあるキーワードの太字、色つけしたいのです。
and検索、or検索もやりたいのですが、どうやって手をつければいいのか困っています。
みなさんのアドバイスを元にやってみようと思います。
Last edited by kirari (2019-07-22 13:52:54)
Offline
主題質問の解法案は、Mozさん案に1票!
(元データは加工せず、表示用計算フィールドで自動更新の代理表示)
追加質問の複数キーワードによる複合検索の場合、
AND か OR かの結合条件指定が必須ですよ。
Last edited by Hiro (2019-07-22 14:00:14)
Offline
1000以上あるフィールド
レコードでなくてフィールドですか?
設計を見直した方が良さそうな.....
Offline
[ Generated in 0.013 seconds, 9 queries executed - Memory usage: 589.71 KiB (Peak: 626.62 KiB) ]