初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2020-11-28 06:54:55

いず
Guest

フィールド内の文章の中で、特定の文字列だけを強調表示したい

環境:Windows 7 , Filemaker Pro adv 12

特定の文字列は、テーブルで管理
検索文字列 分類
あああああ ●●
あいうえお ××
かきくけこ ××

(200近くあります)

文字を入力するフィールドには、他のところから文章をコピペしてきます。
このフィールド内の中で、全ての検索文字列で該当する箇所を検索&置換して、
強調表示した文章に整形したいのですが、どういう手を使ってやればいいでしょうか。

可能であれば検索文字列を置換してかつ、分類を語尾に付け加えたいとも考えています。

#2 2020-11-28 07:55:15

himadanee
Guest

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

語尾とは?
「あああああ」を「あああああ ●●」に置換
それをレコード分繰り返し
でいいんですか

#3 2020-11-28 10:10:49

Shin
Member

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

文中の後部コメントのようなものでしょうか。
検索テーブルから、Substitute() の内容を生成して一気に置換、または、loop で1こずつ置換していく、という方法でしょう。
後注は loop で別に生成するか、検索文字テーブルから元のテキストを参照して分類を抽出して集計、という方法でしょうかね。

Last edited by Shin (2020-11-28 10:21:34)

Offline

#4 2020-11-28 13:42:50

いず
Guest

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

検索テーブルからスクリプトで結合
[ "あああああ" ; "あああああ(●●)" ]  ; [ "あいうえお" ; "あいうえお(××)" ]  ;  ‥‥

Substitute ( テキスト ; 検索テキスト ; 置換テキスト )
検索テキスト ; 置換テキストの部分を → 上記の結合したものを貼り付けて、処理することで意図していたことは出来ました。
ありがとうございました。とりあえずこれでいけます。


ただ、この方法だと、検索テーブルを更新するたびに、結合処理して、置換スクリプトの中身を修正しないといけないですよね。

レコードを一個ずつ処理していこうとやってみたのですが、やり方が悪いのか、砂時計がずっと表示されて動きませんでした。
簡単な何かのミス、もしくは基本的な何かが理解できてないんだろうと思うのですが‥。

Loopでレコードを最後まで
Substitute ( テーブル::文字入力フィールド(グローバル) ; "\""&テーブル::検索文字列&"\"" ; "\""&テーブル::検索文字列&"("&テーブル::分類&"\""&")" )

#5 2020-11-28 14:54:39

Shin
Member

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

語尾につけるのですか。なら簡単ですね。
検索語テーブルに、Substitute 関数の置換する部分を作らせておきます。それを、メインから取り込んで、Evaluate() で評価すると、後々手間いらずでいいでしょう。
https://www.dropbox.com/s/v4fsg4dygfue4 … 2.zip?dl=0
計算フィールドになっていますが、その計算式を自動入力の計算式として定義しておけば、ペーストしたらすぐに処理してくれます。

Offline

#6 2020-11-28 16:23:17

いず
Guest

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

Shin様

サンプルファイルありがとうございました。
さっそくDLしてみたのですが、s_subtxtの集計部分が上手く動きませんでした。
ver12だからかもしれません。
集計フィールドの一覧はver13から追加されているようなので、 その辺りが原因でしょうか。

ただ、検索文字列を結合したものをグローバルフィールドに書き出して、同様に指定することで
同じように計算フィールドを使って、リアルタイムに反映するような動きが出来ました。
スタイルも変更できるようにしてくださっててありがたいです。

色々とご教授ありがとうございました。助かりました。

#7 2020-11-29 02:33:30

Hiro
Member

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

終わってますが、別法の提案です。
計算式だけで変換する極めてシンプルな方法です。

● SQL関数でSubstitute変換成分一覧(#SUB)を生成して求めます。
    →  ["あああああ ";TextStyleAdd("あああああ●●";強調表示)]; [あいうえお";TextStyleAdd("あいうえお××";強調表示)];・;・・・;・

Let(
[
   #SUB=
         ExecuteSQL(
               "
                  SELECT '[""'+""検索文字列""+'"";TextStyleAdd(""'+""検索文字列""+""分類""+'"";強調表示)]'
                  FROM ""検索文字列テーブル""
               "
               ; ""
               ; ";"
         )
];
   Evaluate( "Substitute(TextStyleRemove(テキスト); " & #SUB & ")" )
)

Offline

#8 2020-11-29 08:29:57

Shin
Member

Re: フィールド内の文章の中で、特定の文字列だけを強調表示したい

List ( リレーション::... ) でもいけるのでは。

最近のバージョンでしたら、While() 使って簡単に済ませることができます

While ( 
[ 
	cnt = ValueCount ( List ( 検索テーブル::検索文字列 ) ) ;
	txt = Text
] ; 
	cnt ; 
[ 
	tar = GetNthRecord ( 検索テーブル::検索文字列 ; cnt ) ;
	pst = GetNthRecord ( 検索テーブル::分類 ; cnt ) ;
	txt = Substitute ( txt ; tar ; TextStyleAdd ( tar ; 太字 ) & "(" & pst & ")" ) ;
	cnt = cnt - 1
] ;
	txt 
)

Last edited by Shin (2020-11-29 11:47:16)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 8 queries executed - Memory usage: 522.15 KiB (Peak: 527.05 KiB) ]