みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
環境:Windows 7 , Filemaker Pro adv 12
特定の文字列は、テーブルで管理
検索文字列 分類
あああああ ●●
あいうえお ××
かきくけこ ××
‥
(200近くあります)
文字を入力するフィールドには、他のところから文章をコピペしてきます。
このフィールド内の中で、全ての検索文字列で該当する箇所を検索&置換して、
強調表示した文章に整形したいのですが、どういう手を使ってやればいいでしょうか。
可能であれば検索文字列を置換してかつ、分類を語尾に付け加えたいとも考えています。
語尾とは?
「あああああ」を「あああああ ●●」に置換
それをレコード分繰り返し
でいいんですか
文中の後部コメントのようなものでしょうか。
検索テーブルから、Substitute() の内容を生成して一気に置換、または、loop で1こずつ置換していく、という方法でしょう。
後注は loop で別に生成するか、検索文字テーブルから元のテキストを参照して分類を抽出して集計、という方法でしょうかね。
Last edited by Shin (2020-11-28 10:21:34)
Offline
検索テーブルからスクリプトで結合
[ "あああああ" ; "あああああ(●●)" ] ; [ "あいうえお" ; "あいうえお(××)" ] ; ‥‥
Substitute ( テキスト ; 検索テキスト ; 置換テキスト )
検索テキスト ; 置換テキストの部分を → 上記の結合したものを貼り付けて、処理することで意図していたことは出来ました。
ありがとうございました。とりあえずこれでいけます。
ただ、この方法だと、検索テーブルを更新するたびに、結合処理して、置換スクリプトの中身を修正しないといけないですよね。
レコードを一個ずつ処理していこうとやってみたのですが、やり方が悪いのか、砂時計がずっと表示されて動きませんでした。
簡単な何かのミス、もしくは基本的な何かが理解できてないんだろうと思うのですが‥。
Loopでレコードを最後まで
Substitute ( テーブル::文字入力フィールド(グローバル) ; "\""&テーブル::検索文字列&"\"" ; "\""&テーブル::検索文字列&"("&テーブル::分類&"\""&")" )
語尾につけるのですか。なら簡単ですね。
検索語テーブルに、Substitute 関数の置換する部分を作らせておきます。それを、メインから取り込んで、Evaluate() で評価すると、後々手間いらずでいいでしょう。
https://www.dropbox.com/s/v4fsg4dygfue4 … 2.zip?dl=0
計算フィールドになっていますが、その計算式を自動入力の計算式として定義しておけば、ペーストしたらすぐに処理してくれます。
Offline
Shin様
サンプルファイルありがとうございました。
さっそくDLしてみたのですが、s_subtxtの集計部分が上手く動きませんでした。
ver12だからかもしれません。
集計フィールドの一覧はver13から追加されているようなので、 その辺りが原因でしょうか。
ただ、検索文字列を結合したものをグローバルフィールドに書き出して、同様に指定することで
同じように計算フィールドを使って、リアルタイムに反映するような動きが出来ました。
スタイルも変更できるようにしてくださっててありがたいです。
色々とご教授ありがとうございました。助かりました。
終わってますが、別法の提案です。
計算式だけで変換する極めてシンプルな方法です。
● SQL関数でSubstitute変換成分一覧(#SUB)を生成して求めます。
→ ["あああああ ";TextStyleAdd("あああああ●●";強調表示)]; [あいうえお";TextStyleAdd("あいうえお××";強調表示)];・;・・・;・
Let(
[
#SUB=
ExecuteSQL(
"
SELECT '[""'+""検索文字列""+'"";TextStyleAdd(""'+""検索文字列""+""分類""+'"";強調表示)]'
FROM ""検索文字列テーブル""
"
; ""
; ";"
)
];
Evaluate( "Substitute(TextStyleRemove(テキスト); " & #SUB & ")" )
)
Offline
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
Pages: 1
[ Generated in 0.006 seconds, 8 queries executed - Memory usage: 522.15 KiB (Peak: 527.05 KiB) ]