みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつもお世話になっております。
HighLight[テキスト ; キーワード]
関数についてですが、いつも使用させていただいております。
大変便利な関数で助かっております。
そしてこの関数についての質問なのですが、
テキスト内に複数のキーワードを強調表示させたく中身を多少いじってみましたが、
うまくできなかったためHiroさんが作成していただいたカスタム関数のまま使用させております。
理想)
テキスト:あAいうBえおC
キーワード1:A
キーワード2:B
キーワード3:C
理想出力例)
あ【A】いう【B】えお【C】
といった具合に出力するにはどうしたらいいでしょうか?
Let([
$prm[1]=引数[1];
$prm[2]=引数[2];
$txt=Substitute($prm[1]; ["""";Char(8203)]; [¶;Char(8204)]);
$key=Substitute($prm[2]; ["""";Char(8203)]; [¶;Char(8204)]);
#fnc=
Substitute(
Quote($txt)
; [$key; """&TextStyleAdd("""&$key&"""; 強調表示)&"""]
)
];
Substitute(Evaluate(#fnc); [Char(8203);""""]; [Char(8204);¶])
)
普通の関数のように複数回呼び出せばいいのでは?
func(func(func(pram;param);param)param)
普通の関数のように複数回呼び出せばいいのでは?
func(func(func(pram;param);param)param)
返信ありがとうございます。
このように以前試しましたが、2回目の呼び出し時点で強調表示されなくなり、またダメもとで今回も試しましたが、
やはりできませんでした。
ああ、同じ変数を使いまわすから入れ子にするのはダメなんですね。3回順番に呼び出さないとだめか。
Let([
a=func(param;param);
b=func(param;param);
c=func(param;param)
];
c
)
ああ、同じ変数を使いまわすから入れ子にするのはダメなんですね。3回順番に呼び出さないとだめか。
Let([
a=func(param;param);
b=func(param;param);
c=func(param;param)
];
c
)
ありがとうございます。
これだと
最後の c のみ表示されるのではないでしょうか?汗
あれえ?指定した以外の文字を強調解除してしまうんですね。
バージョンは?
素直にWhileを使って変数を使わない計算式に書き直したほうが早いかも。
While (
[
txt = Text ;
key0 = List ( Key1 ; Key2 ; Key3 ) ;
i = ValueCount ( key0 )
] ;
i ;
[
key = GetValue ( key0 ; i ) ;
txt = Substitute ( txt ; key ; "【" & key & "】" ) ;
i = i - 1
] ;
txt
)
でいいでしょう。
究極
Substitute ( txt ;[ key1 ; "【" & key1 & "】" ];[ key2 ; "【" & key2 & "】" ];[ key3 ; "【" & key3 & "】" ] )
でもいいんですが。
Hiroさんの関数を入れ子にすると、多分入子の内外で変数が被るようになるので動かないのでしょうね。
Last edited by Shin (2022-05-22 10:51:06)
Offline
ああ、質問の出力例が表現できないので文字を追加したようになってますが、そうでなくTextStyleAddする計算式です。
しかし言われてみれば単にSubstituteを入れ子にするだけでできてるような?
Substitute (
Substitute (
Substitute (
テキスト ; キーワード1 ; TextStyleAdd ( キーワード1 ; 強調表示 ) ) ;
キーワード2 ; TextStyleAdd ( キーワード2 ; 強調表示 ) ) ;
キーワード3 ; TextStyleAdd ( キーワード3 ; 強調表示 ) )
何か違うのかな。Substitute関数は入れ子でなくて引数の繰り返しでいいのか...
テストした方ので書いておきます。
While ( [ txt = Text ; key0 = List ( Key1 ; Key2 ; Key3 ) ; i = ValueCount ( key0 ) ] ; i ; [ key = GetValue ( key0 ; i ) ; txt = Substitute ( txt ; key ; "【" & key & "】" ) ; i = i - 1 ] ; txt )
でいいでしょう。
究極
Substitute ( txt ;[ key1 ; "【" & key1 & "】" ];[ key2 ; "【" & key2 & "】" ];[ key3 ; "【" & key3 & "】" ] )
でもいいんですが。
Hiroさんの関数を入れ子にすると、多分入子の内外で変数が被るようになるので動かないのでしょうね。
Shin様、himadanee様
ありがとうございます。
お二人の手法どちらでもできました。
助かりました。
Pages: 1
[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 520.45 KiB (Peak: 524.99 KiB) ]