みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
週末に考えおりましたが解決できなかったのでご相談させてください。
FMP18
テーブルAの商品名フィールドに
青リンゴ、夏みかん、二十世紀梨、、、 などがあります。
同じくテーブルAに
分類CD、分類名をスクリプトを用いてグループ分けをしたいと考えております。
試みたのが
テーブルBを作成し、キーワード、分類CD、分類名フィールドを作成。
(テーブルAにもキーワードと名前をつけたグローバルフィールドを作成しテーブルA・Bのキーワードフィールドでリレーションをしました)
値一覧でテーブルBのキーワードを作成。
PatternCount ( テーブルA::商品名 ; "リンゴ" )であればデータビューアで「1」が返りますが、
PatternCount ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ))
※テーブルBキーワードフィールドにはりんご、リンゴがあります。
計算式をどのように見直せば良いでしょうか。
アドバイスを頂けると幸いです。
どうぞよろしくお願いいたします。
Offline
ValueCount ( FilterValues ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ) ) )
を使ってみれば、似たような結果になります。
Offline
Shin様
お返事ありがとうございます。
スマホでご回答頂いていたのを楽しみしてようやくPCの前に来ました。
おっしゃる通りの計算式をデータビューアで確認しましたが結果が0でした。
何がダメなのでしょうか。。。
Offline
PatternCount ( テーブルA::商品名 ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ))
これでは商品名から「全値のリスト」を探すので何も一致しません。引数が逆です。
FilterValuesは値の完全一致を探すことになり、「青りんご」はキーワードリスト内の「りんご」とは一致しません。
商品名と部分一致するキーワードを探す
でしょう?
PatternCountの引数を逆にしてもダメですよ。
検索テキストを
「キーワード」のリストから一つずつ抜いて、
それで判定して行かないとダメでしょう。
例えば、キーワードに
青
リンゴ
が有った場合、
青リンゴ
はどちらにも含まれちゃいますが、これは考えなくてもいい?
Offline
アァ部分一致でしたか。loop 回さないとできないかな。
カスタム関数の再帰について
の式で、商品名フィールドを分解しておけばいいでしょう。
Last edited by Shin (2021-04-05 08:59:22)
Offline
「商品名」文字列内の予約キーワード部分だけを抽出する(青りんご→りんご、青さば→諸口)ものとして、
その場合の計算式は、ループ再帰式で、(※候補一覧にない場合は、空白でなく「諸口」を返す仕様の式)
(※なお、「キーワード値一覧」は「カスタム値」値一覧にすれば、別途テーブルBはあえて不要!!)
Let(
[
$txt=テーブルA::商品名;
$keys= ValueListItems(Get(ファイル名);"キーワード値一覧"));
$i=0;
$res="諸口";
$LOOP=
"Case(
$res<>""諸口"" or $i=ValueCount($keys)
; $res
; Let([
$i=$i+1;
#itm=GetValue($keys; $i);
$res=Case(PatternCount($txt; #itm); #itm; $res)
]; Evaluate($LOOP))
)"
];
Evaluate($LOOP)
)
Last edited by Hiro (2021-04-05 17:51:40)
Offline
Let(
[
$txt = テーブルA::商品名 ;
$len = Length ( $txt ) ;
$row = ( $len ^ 2 + $len ) / 2 ;
$i = 0 ;
$res = "" ;
$eva =
"Case (
$i = $row ; $res ;
Let(
[
$i = $i + 1 ;
$l = Int ( Sqrt ( 2 * $i - 1.75 ) + .5 ) ;
$p = ( $l ^ 2 + $l ) / 2 - $i + 1 ;
$res = List ( $res ; Middle ( $txt ; $p ; $len + 1 - $l ) )
] ;
Evaluate ( $eva )
)
)"
] ;
ValueCount ( FilterValues ( Evaluate ( $eva ) ; ValueListItems ( Get ( ファイル名 ) ; "キーワード" ) ) )
)
でいいかも。FM18 ですので、Whie 使った方が簡便でしょう。
Offline
ちょっと思ったんですが、商品名から、分類を取得するマスターを作るべきなのでは。
上の、青リンゴ、夏みかん、二十世紀梨 だと、ラ・フランスが入るとどうしようもないでしょう。
Offline
Pages: 1
[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 522.54 KiB (Peak: 527.45 KiB) ]