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

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

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

You are not logged in.

Announcement

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


#1 2022-05-20 10:24:30

KP
Guest

Hiro様のカスタム関数について(HighLight関数について)

いつもお世話になっております。
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);¶])
)

#2 2022-05-20 10:46:14

himadanee
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

普通の関数のように複数回呼び出せばいいのでは?
func(func(func(pram;param);param)param)

#3 2022-05-20 12:42:42

KP
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

himadanee wrote:

普通の関数のように複数回呼び出せばいいのでは?
func(func(func(pram;param);param)param)

返信ありがとうございます。
このように以前試しましたが、2回目の呼び出し時点で強調表示されなくなり、またダメもとで今回も試しましたが、
やはりできませんでした。

#4 2022-05-20 12:53:57

himadanee
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

ああ、同じ変数を使いまわすから入れ子にするのはダメなんですね。3回順番に呼び出さないとだめか。
Let([
a=func(param;param);
b=func(param;param);
c=func(param;param)
];
c
)

#5 2022-05-20 13:23:34

KP
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

himadanee wrote:

ああ、同じ変数を使いまわすから入れ子にするのはダメなんですね。3回順番に呼び出さないとだめか。
Let([
a=func(param;param);
b=func(param;param);
c=func(param;param)
];
c
)

ありがとうございます。
これだと
最後の c のみ表示されるのではないでしょうか?汗

#6 2022-05-20 13:49:32

himadanee
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

あれえ?指定した以外の文字を強調解除してしまうんですね。

バージョンは?
素直にWhileを使って変数を使わない計算式に書き直したほうが早いかも。

#7 2022-05-20 16:56:17

Shin
Member

Re: Hiro様のカスタム関数について(HighLight関数について)

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

#8 2022-05-20 17:17:06

himadanee
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

ああ、質問の出力例が表現できないので文字を追加したようになってますが、そうでなくTextStyleAddする計算式です。

しかし言われてみれば単にSubstituteを入れ子にするだけでできてるような?
Substitute (
Substitute (
Substitute (
テキスト ; キーワード1 ; TextStyleAdd ( キーワード1 ; 強調表示 ) ) ;
キーワード2 ; TextStyleAdd ( キーワード2 ; 強調表示 ) ) ;
キーワード3 ; TextStyleAdd ( キーワード3 ; 強調表示 ) )

何か違うのかな。Substitute関数は入れ子でなくて引数の繰り返しでいいのか...
テストした方ので書いておきます。

#9 2022-05-23 13:10:42

KP
Guest

Re: Hiro様のカスタム関数について(HighLight関数について)

Shin wrote:
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様
ありがとうございます。
お二人の手法どちらでもできました。
助かりました。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 520.45 KiB (Peak: 524.99 KiB) ]