みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
FmProAd13使用しています。
ドロップダウンリストの値を、あるテーブル(実際には、営業者テーブル)を取得し表示しています。
その再、営業者コードの表示順で表示したいのですが。
営業車コードを最初のフィールドに設定すれば可能と思いますが、
ドロップダウンリスト内には、営業者名称のみ表示したいのです。
(例)
実際のテーブル
3001 営業200
2001 営業300
5001 営業100
4001 営業500
1001 営業400
となっていた場合、営業者名で表示すると
営業100
営業200
営業300
営業400
営業500
となってしまします。
営業400
営業300
営業200
営業500
営業100
と表示したいのですが。
何かいい方法を教えてください。
過去スレ
https://fm-aid.com/bbs2/viewtopic.php?id=1145
ここに回答が有ります。
Offline
任意の表示順数値(営業者コード)を「ゼロ幅スペース文字」の文字列に変換して、2番目表示のソート値を視認できなくする案。
利用安全なゼロ幅文字が3文字の為、10進数値→3進数変換→3進数字>3種ゼロ幅文字置換、計算処理しています。
その変換式は、
Let([
//$D=営業者コード;
$D=10^6+営業者コード; //修正式、桁数を6桁と仮定
$N=3;
$R="";
$F="Case(
$D=0; $R;
Let([
$M=Mod($D;$N);
$D=Div($D;$N);
$R=$M & $R
]; Evaluate($F))
)"
];
Substitute(Evaluate($F); [0;Char(8203)];[1;Char(8204)];[2;Char(8206)])
)
とし、
値一覧のソート索引は「unicode」へ設定変更する。
【補足修正】
この事例は問題ありませんが、念のため、補足修正します。
順位数値を文字変換してテキストソート比較するため、元の数値は桁数が
合っている必要があります。(6桁例:10 → 100010)
そのため、$D=営業者コード; → $D=10^桁数+営業者コード; 、へ式を修正しました。
Last edited by Hiro (2014-04-09 15:57:38)
Offline
元の数値でなく3進変換後に桁数が揃ってないといけないので、ちょっと違うのでは。
Offline
確かに、御意。
3進変換後の最大3進桁数は、1+2*最大10進桁数 で得られるので、
【修正式】
Let([
$D=営業者コード;
$N=3; //進数3を指定。
$10L=6; //最大10進桁数、ココでは6桁を指定。
$3L=1+2*$10L;
$R="";
$F="Case(
$D=0; $R;
Let([$M=Mod($D;$N); $D=Div($D;$N); $R=$M & $R]; Evaluate($F))
)";
$R=Right(Substitute(10^$3L-1;["9";"0"]) & Evaluate($F); $3L)
];
Substitute($R; [0;Char(8203)];[1;Char(8204)];[2;Char(8206)])
)
Offline
Char(8206)も使えるんですね。8205を使わないのは、理由がありますか?
8203以外はWordCountに影響するみたいだけど、この目的(UNICODE索引でのソート)では関係ないですよね。
自分も付け焼刃ですが、
解説ページ「空白・特殊記号」の「(推奨)「Unicode 200b」『』〜「Unicode 200f」『』」
ゼロ幅空白文字グループを見て、その中で「使用は控えた方が良い」される文字は避けました。
Offline
なるほど。ざっと見ただけですが、「(Windows)2000で化けて表示されるため」ですから、関係なさそうですね。
むしろ8206は「この文字以降、文字の順序が反転する」機能だから、8207の方が安全な気がします。
ソート順に使うだけ(データとしては入力されない)なんで、やってみて動いてればどうでもいいかな。
#8206の反転問題は非表示文字が幾ら反転表示されても、痛くも痒くもありませんよね。表示だけならソート自体に影響ありませんから。
#8205と#8207の文字化け問題は空白文字が文字化けて表示されると、無表示の本来目的が達成できません。
もし文字化け問題が、『「(Windows)2000で化けて表示されるため」ですから、関係なさそうですね。』と解釈できるなら、
[#8203~#8207]に[#8234~#8238]のゼロ幅空白文字を加え全10文字を使えば、先の変換式はぐっとシンプルに成りますよね。
進数変換とか桁数変換の式が不要なので、式は、
Substitute(
Right(Substitute(10^6-1;9;0)&数値コード; 6) //最大桁数を仮値6として
;[0;Char(8203)]
;[1;Char(8204)]
;[2;Char(8205)]
;[3;Char(8206)]
;[4;Char(8207)]
;[5;Char(8234)]
;[6;Char(8235)]
;[7;Char(8236)]
;[8;Char(8237)]
;[9;Char(8238)]
)
種々の動作環境をお持ちの方に、動作検証して頂けると嬉しいです。
Offline
ソート順の他に、入力値とリスト表示値を両方使う場合は、反転表示がFMでも有効なので、だめでした。
どの場合に反転するのか今一法則がつかめず...
9,19,29だと反転しないが39,49,59は反転してる。
変換式 & Char(8237) & 表示値
を第2フィールドに指定すると、LTRでOVERRIDEするので反転する問題がなくなるようです。
EMBEDとか用途のわかってない文字を使うのが若干心配ではあるけど
Pages: 1
[ Generated in 0.010 seconds, 7 queries executed - Memory usage: 528.81 KiB (Peak: 549.72 KiB) ]