以下よく解ってないことがあります。情報を探して読んで、自分で弄って理解していきたいと思っています。
ささっと見た限りですが
・グローバル格納は、ファイル内で使い回せる変数だと説明は読みました。スクリプトでローカル変数は扱ったことがあります。グローバルも試してみます。
・Left(ひらがな1文字 & 演算子 & 指定数; 0) という式の組み方を知りませんでした。びっくりしました。Left(あ>3;0)、空欄しか返ってきません。Left(テキスト;0)の意味がわかりません。他のフィールドの式もみて考えてみます。もしかして並び順に影響がある?
・Let関数は扱ったことが無いのでこれから弄ってみようと思います。
・PatternCountを扱ったことがありません。弄ってみます。
【静的リレーションの動的活用.fmp12のデモ画像】
・「演算子」フィールド:希望のリレーション演算子をラジオボタン(<,≤,=,≥,>)から五者一択代入するグローバルフィールド。
・「指定数」フィールド:抽出する文字数を指定するグローバルフィールド。
・「最大字数」フィールド:対象文字列のなかで最大の文字数が提供されているグローバルフィールド。
以上を基に、汎用の静的固定リレーション、
「テーブル1::ひらがな1文字」 = 「テーブル2::ひらがな1文字」
「テーブル1::文字数」 = 「テーブル2::字数順列」
を、あたかも、条件付き動的リレーション動作に変える要点フィールド、
そのテーブル2「字数順列」計算フィールドの計算式は以下です。
計算結果を関連文字数の一覧リストとして書き出し、「テーブル2::字数順列」を
ORマルチ照合キーフィールドとして利用するのがミソです。
【 テーブル2「字数順列」の計算式 】
Let([
#演算子=「演算子」フィールド; //例値:"≥"(関連文字数≥文字数)
#文字数=「指定数」フィールド; //例値:4
#最大字数=「最大字数」フィールド; //例値:7(Max(::関連文字数))
#演算子=
PatternCount(#演算子;"<")*1 +
PatternCount(#演算子;"≤")*2 +
PatternCount(#演算子;"=")*3 +
PatternCount(#演算子;"≥")*4 +
PatternCount(#演算子;">")*5;
$位置番=Choose(#演算子; ""; 1; 1; #文字数; #文字数; #文字数+1) - 1;
#文字数=Choose(#演算子; ""; #文字数-1; #文字数; 1; #最大字数-#文字数+1; #最大字数-#文字数);
#字数順列=Substitute(10^#文字数-1; [9; "Let([$位置番=$位置番+1]; $位置番&\¶)&"]) & Quote("")
];
Evaluate(#字数順列) //例答:"4¶5¶6¶7¶"
)
ありがとうございます!。
一週間ほどずっと考え続けてわからず無理だとさえ思っていたので、とてもうれしいです。
追記していただいた内容が、私のやりたいさらなる希望でした。見ました。
とてもありがたいです。
抽出テーブルの文字1、文字数の、データの格納、グローバル格納
を知らなかったので調べてみたいと思います。
理解できなければ、質問させてください。
不等号までの条件を作るのでしたら、
https://www.dropbox.com/s/cwaejrvjabzye … fmp12?dl=0
のような方法もあります。数列を作るには再帰式で作った方がいいでしょうが、簡易的にはこれでも十分でしょう。
List関数を使ってフィールドのデータを表示させています。
lengthで文字数をカウントして、指定した文字数での表示はできました。
しかし、より大きい、よりちいさいの指定の仕方、アイデアが思いつきません。
今、List関数メインで、色々組んでいるので、できればList関数で実現できるのが希望です。
現状
指定数 = 3
うえき、
うどん、
うまみ、
希望
指定数 > 3
うぐいす、
うみぶどう、
うんどうかい、
「テーブル1::ひらがな1文字」 計算(テキスト) left ( テーブル1::ひとこと )
「テーブル1::文字数」 計算(数字) length ( テーブル1::ひとこと ; 1 )
「テーブル1::ひとこと」 テキスト 任意のひらがなの文字列
「テーブル1::前処理」 計算(テキスト) Substitute(10^Length(ひとこと)-1; [9;Char(12446)]) & ひとこと
「テーブル2::ひらがな1文字」 テキスト 「あ」〜「ん」の1文字が順番に入る
「テーブル2::指定数」 数字 任意の数字
「テーブル2::まとめ順」 Substitute(SortValues(List(テーブル1::前処理); 1); [Char(12446);""])
「テーブル1::ひらがな1文字」 = 「テーブル2::ひらがな1文字」
「テーブル1::文字数」 = 「テーブル2::指定数」
どなたか教えてください。よろしくお願いします。
]]>